barra de escape com barra invertida
echo ${test//\//:}
Suponha que declaramos
test="/this/isjust/atestvariable/for/stringoperation"
e queremos substituir cada instância de '/' pelos dois pontos ':'.
Então, acho que esse comando deve funcionar:
echo ${test//\/:}
(como ${variable//pattern/string}
substitui todas as correspondências do padrão com a string especificada)
Mas, ao executar o echo ${test//\/:}
, obtenho a saída como
/this/isjust/atestvariable/for/stringoperation
Onde eu poderia estar errado? Obrigado pela sua ajuda.
Isto:
${test//\/:}
substituiria todas as instâncias (desde double-slash //
no início) de /:
sem nada (sem segunda barra sem escape).
Isto:
${test/\//:}
Substituiria a primeira instância (desde uma única barra como separador) de /
(que foi escapada) por :
.
E isso:
${test//\//:}
Deve substituir todas as correspondências de /
por :
.
Exemplo:
$ test="/this/isjust/atestvariable/:for/:stringoperation"
$ echo ${test//\/:}
/this/isjust/atestvariableforstringoperation
$ echo ${test/\//:}
:this/isjust/atestvariable/:for/:stringoperation
$ echo ${test//\//:}
:this:isjust:atestvariable::for::stringoperation