O que $ {var / a / b / \ c} significa?

4

Estou um pouco confuso sobre esta afirmação (construção?). Eu não encontrei nenhuma fonte suficiente sobre isso (eu nem sei como chamá-lo). O que está acontecendo aqui?

bash-4.3$ var="a/b"
bash-4.3$ f=${var/b/c/\d}                                                                                                                                                                                                             
bash-4.3$ echo $f                                                                                                                                                                                                                     
a/c/d

ou isto:

bash-4.3$ var="b/a"                                                                                                                                                                                                                   
bash-4.3$ f=${var/b/c/\d}                                                                                                                                                                                                             
bash-4.3$ echo $f                                                                                                                                                                                                                     
c/d/a 

Obrigado

    
por user3648963 12.01.2016 / 17:58

1 resposta

6

Leia sobre a expansão dos parâmetros do bash. Em seus exemplos, você está usando a sintaxe de pesquisa e substituição que substitui a primeira ocorrência do padrão fornecido.

${parameter/pattern/string}

Exemplo:

> X="aaaa"
> echo ${X/a/b}   # substitute first occurence of a with b
> baaa

A sintaxe para substituir todas as ocorrências é:

${parameter//pattern/string}

Exemplo:

> X="aaaa"
> echo ${X//a/b}   # substitute all occurences of a with b
> bbbb

Assim, no seu primeiro exemplo, seu parâmetro era "a / b" e você disse ao bash para substituir a primeira ocorrência de "b" em "a / b" (o valor de var) pela string "c / d" ( que resulta em "a / c / d"). Note que "\ d" é desnecessariamente escapado - não há diferença para "d" sozinho.

    
por 12.01.2016 / 18:49

Tags