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