A substituição correta é
home_mf="${home//\//}"
Isso se divide da seguinte maneira:
-
//substitui todos os -
\barra invertida -
/com -
/barra
Demonstração:
$ t='\a\b\c'; echo "${t//\//}"
/a/b/c
Eu quero substituir a barra invertida ( \ ) pela barra ( / ) em uma variável no bash.
Eu tentei assim, mas não funciona:
home_mf = ${home//(\)//(/)}
Por exemplo, eu gostaria de
\a\b\c -> /a/b/c
Isso fará isso:
home_mf=${home//\//\} # forward to backward slash
home_mf=${home//\/\/} # backward to forward slash
por exemplo:
$ 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
A sintaxe ${variable/..} é ksh , bash e possivelmente outras shells específicas, mas não estão presentes em todas as shells baseadas na sintaxe shell da Bourne, por exemplo. %código%. Se você quiser um caminho portátil (POSIX), você pode usar dash :
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
Tags bash bash-scripting