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