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 .