Похожие вопросы

Ubuntu bash на windows 10 перестал работать
Scripting: что проще всего извлечь значение в теге XML-файла?
Пакетная сортировка песен в каталоге по исполнителю в Unix [закрыто]
$ logout bash: выход: не войти оболочка: использовать выход'
Как удалить символическую ссылку на каталог?
Как объединить строки в сценарий bash?
WSL / Bash в Windows 10: не удалось создать пользователя UNIX, возвращен код ошибки 10
Debian 9: bash: ls, cat, команда не найдена после неправильного изменения пути
Нет необходимости в экспорте при выполнении функций в subshell
Однострочная команда для перемещения с сохранением той же структуры папок
Парсинг JSON с утилиты busybox
Какова область "экспортируемых" переменных оболочки Unix?
что значит красное имя файла на черном фоне?
Что не так с моим сценарием bash, чтобы сохранить последние x-файлы и удалить остальные?
Как нечеткие полные имена файлов в bash, как плагин vim ctrlp?

Заменить обратный слеш("") с косой черты("/") в переменную в bash

Я хочу заменить обратную косую черту () с косой чертой(/) в переменной в bash.
Я пробовал это так, но это не работает:

home_mf = ${home//()//(/)}

например, я хотел бы

abc -> /a/b/c
5
задан Toby Speight
источник

2 ответов

правильная замена

home_mf="${home//\//}"

это распадается следующим образом:

  • // заменить все
  • \ обратная косая черта
  • / С
  • / полоснуть

демонстрация:

$ t='\a\b\c'; echo "${t//\//}"
/a/b/c
8
отвечен Toby Speight 2016-04-21 09:51:18
источник

это будет делать это:

home_mf=${home//\//\} # forward to backward slash
home_mf=${home//\/\/} # backward to forward slash

например:

$ cat slash.sh
#!/bin/bash
set -x
home=/aa/bb/cc       
home_mf=${home//\//\}
echo $home_mf
home_mf=${home_mf//\/\/}
echo $home_mf
$ ./slash.sh
+ home=aa/bb/cc
+ home_mf='\aa\bb\cc'
+ echo '\aa\bb\cc'
\aa\bb\cc
+ home_mf=/aa/bb/cc
+ echo /aa/bb/cc
/aa/bb/cc

The ${variable/..} синтаксис ksh,bash, и, возможно, другие оболочки специфичны, но не присутствуют во всех оболочках, основанных на синтаксисе Bourne shell, например dash. Если вы хотите портативный способ (POSIX), вы можете использовать sed вместо:

home_mf=$(printf "%s" "$home" | sed 's/\//\/g')    # forward to backward slash
home_mf=$(printf "%s" "$home_mf" | sed 's/\/\//g') # backward to forward slash
6
отвечен jlliagre 2016-04-21 14:19:13
источник

Другие вопросы bash bash-scripting