Como funciona $ {0 ## * /} e $ {0% / *}?

28

Estou bastante confuso sobre as seguintes expressões regulares que encontrei em um script de shell:

${0##*/}
${0%/*}

Como eles funcionam?

    
por user785099 11.10.2011 / 00:38

1 resposta

33

Essas não são expressões regulares, elas são exemplos da expansão de parâmetros do Bash: a substituição de uma variável ou um parâmetro especial por seu valor. O Wiki do Wooledge tem uma boa explicação .

Basicamente, no exemplo que você tem, ${0##*/} é traduzido como:

for the variable $0, and the pattern '/', the two hashes mean from the beginning of the parameter, delete the longest (or greedy) match—up to and including the pattern.

Então, onde $0 é o nome de um arquivo, por exemplo, $HOME/documents/doc.txt , o parâmetro seria expandido como: doc.txt

Da mesma forma, para ${0%/*} , o padrão / é comparado com o fim do parâmetro (o % ), com a correspondência mais curta ou não desejada excluída - que no exemplo acima lhe daria $HOME/documents .

Veja também o artigo sobre o Wiki do Bash Hacker .

    
por 11.10.2011 / 00:59