Estou bastante confuso sobre as seguintes expressões regulares que encontrei em um script de shell:
${0##*/}
${0%/*}
Como eles funcionam?
Estou bastante confuso sobre as seguintes expressões regulares que encontrei em um script de shell:
${0##*/}
${0%/*}
Como eles funcionam?
Respostas:
Essas não são expressões regulares, são exemplos da expansão de parâmetros do Bash: a substituição de uma variável ou de um parâmetro especial por seu valor. A Wiki Wooledge tem uma boa explicação .
Basicamente, no exemplo que você tem, ${0##*/}
traduz como:
para a variável $ 0 e o padrão '/', os dois hashes significam desde o início do parâmetro, exclua a correspondência mais longa (ou gananciosa) - até e incluindo o padrão.
Então, onde $0
está o nome de um arquivo, por exemplo,, $HOME/documents/doc.txt
então o parâmetro seria expandido como:doc.txt
Da mesma forma, para ${0%/*}
, o padrão /
é comparado com o final do parâmetro (the %
), com a correspondência mais curta ou não gananciosa excluída - o que no exemplo acima forneceria $HOME/documents
.
Veja também o artigo no Wiki do Bash Hacker .
*
) indica que tudo, inclusive o padrão, será excluído. Portanto, para o início do parâmetro, #
ele fica à esquerda e ao final %
, trabalhando na outra direção da direita.
sh
.
basename
edirname
? : D