${0} é o primeiro argumento do script, ou seja, o nome ou caminho do script. Se você iniciar seu script como path/to/script.sh , então ${0} será exatamente essa sequência: path/to/script.sh .
A parte %/* modifica o valor de ${0} . Isso significa: pegue todos os caracteres até / seguido de um nome de arquivo. No exemplo acima, ${0%/*} será path/to .
Você pode ver isso em ação no seu shell:
$ x=path/to/script.sh
$ echo "${x%/*}"
path/to
Sh suporta muitos outros tipos de "substituição de parâmetros". Aqui está, por exemplo, como pegar o nome do arquivo em vez do caminho:
$ echo "${x##*/}"
script.sh
Em geral, % e %% sufixos de faixa, enquanto # e ## prefixos de faixa. Você pode ler mais sobre a substituição de parâmetros .