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 $0está o nome de um arquivo, por exemplo,, $HOME/documents/doc.txtentã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.
basenameedirname? : D