Я очень озадачен следующими регулярными выражениями, которые я нашел в сценарии оболочки:
${0##*/}
${0%/*}
Как они работают?
Это не регулярные выражения, это примеры расширения параметров Bash: подстановка переменной или специального параметра ее значением. Wooledge Wiki имеет хорошее объяснение .
По сути, в приведенном вами примере это ${0##*/}
выглядит так:
для переменной $ 0 и шаблона '/' два хеша означают от начала параметра, удаляют самое длинное (или жадное) совпадение - вплоть до шаблона включительно.
Итак, где $0
имя файла, например $HOME/documents/doc.txt
, тогда параметр будет расширен как:doc.txt
Точно так же, для ${0%/*}
, образец /
сопоставляется с концом параметра ( %
), с самым коротким или не жадным соответствием, удаленным - что в приведенном выше примере даст вам $HOME/documents
.
Смотрите также статью в Bash Hacker's Wiki .
basename
иdirname
? : D*
) указывает, что все, включая шаблон, будут удалены. Следовательно, для начала параметра,#
он слева и в конце%
, работает наоборот справа.sh
.