Definições:
${string%substring}
exclui a correspondência mais curta de $substring
do final de $string
.
${string##substring}
exclui a correspondência mais longa de $substring
do início de $string
.
Seu exemplo:
abspath=$(cd ${0%/*} && echo $PWD/${0##*/})
${0%/*}
exclui tudo após a última barra, fornecendo o nome do diretório do script (que pode ser um caminho relativo).
${0##*/}
exclui tudo até a última barra, fornecendo apenas o nome do script.
Portanto, esse comando muda para o diretório do script e concatena o diretório de trabalho atual (fornecido por $PWD
) e o nome do script que fornece o caminho absoluto.
Para ver o que está acontecendo, tente:
echo ${0%/*}
echo ${0##*/}