Как работают $ {0 ## *} и $ {0% / *}?

Я довольно смущен следующими регулярными выражениями, которые я нашел в сценарии оболочки:

${0##*/} ${0%/*} 

Как они работают?

Это не регулярные выражения, они являются примерами расширения параметра Bash: заменой переменной или специального параметра на ее значение. Wooledge Wiki имеет хорошее объяснение .

В принципе, в примере, который у вас есть, ${0##*/} переводится как:

для переменной $ 0 и шаблона '/', два хэша означают от начала параметра, удаляют самую длинную (или жадную) совпадение с шаблоном и включают шаблон.

Итак, где $0 – это имя файла, например $HOME/documents/doc.txt , тогда параметр будет расширен как: doc.txt

Аналогично, для ${0%/*} шаблон / сопоставляется с концом параметра ( % ) с удаленным кратчайшим или нежелательным совпадением – который в приведенном выше примере даст вам $HOME/documents .

См. Также статью о Wiki Hash Hacker .