Variável Bash $ {0 ## * /}


8

Estou tentando entender a variável ${0##*/}que encontrei em um script bash.

Eu entendo que $0contém o nome ou o caminho do script e, em seguida, ##funciona como em ${parameter##pattern}( fonte ).

Mas não entendo o que /está fazendo aqui. Eu só conheço essa torção de sintaxe com duas barras:${parameter/pat/string}

Quando eu ecoar essa variável no bash, recebo bash:)

Por fim, não tenho autorização para compartilhar o script. Deixe-me apenas dizer que a variável é chamada SOFT="${0##*/}"e é usada em uma printfdeclaração"Error message sent by $SOFT"

Respostas:


12

Isso corta todos os elementos anteriores do caminho, exatamente como basename $0faria. As ##tentativas de encontrar a expansão correspondente mais longa do padrão de prefixo:

$ x=/a/b/c/d
$ echo ${x##*/}
d
$ basename $x
d

Na página do manual:

${parameter##word}
       Remove matching prefix pattern.  The word is expanded to produce
       a pattern just as in pathname expansion.  If the pattern matches
       the  beginning of the value of parameter, then the result of the
       expansion is the expanded value of parameter with  the  shortest
       matching  pattern  (the ``#'' case) or the longest matching pat‐
       tern (the ``##'' case) deleted.  

A razão para usar ${0##*/}é que não envolve uma chamada de programa externa, mas está obscurecendo o que está acontecendo.


Apenas curioso, como você conseguiu a página de manual para isso?
Psycho Punch

Você já tentou man bashe depois procurou parameter##?
Anthon

Sim, eu fiz, man bashmas bobo eu, procurei por ${ele não conseguiu encontrar alguma correspondência. Obrigado.
Psycho Punch
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.