Я хочу заменить обратную косую черту () с косой чертой(/) в переменной в bash.
Я пробовал это так, но это не работает:
home_mf = ${home//()//(/)}
например, я хотел бы
abc -> /a/b/c
Я хочу заменить обратную косую черту () с косой чертой(/) в переменной в bash.
Я пробовал это так, но это не работает:
home_mf = ${home//()//(/)}
например, я хотел бы
abc -> /a/b/c

правильная замена
home_mf="${home//\//}"
это распадается следующим образом:
// заменить все\ обратная косая черта/ С/ полоснутьдемонстрация:
$ t='\a\b\c'; echo "${t//\//}"
/a/b/c

это будет делать это:
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
