Substituindo um padrão por uma string

3

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.

    
por MathMan 19.10.2016 / 14:23

2 respostas

5

barra de escape com barra invertida

echo ${test//\//:}
    
por 19.10.2016 / 14:26
8

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
    
por 19.10.2016 / 14:37

Tags