Я дуже розгублений щодо таких регулярних виразів, які я знайшов у сценарії оболонки:
${0##*/}
${0%/*}
Як вони працюють?
Я дуже розгублений щодо таких регулярних виразів, які я знайшов у сценарії оболонки:
${0##*/}
${0%/*}
Як вони працюють?
Відповіді:
Це не регулярні вирази, це приклади розширення параметра Баша: підміна змінної або спеціального параметра його значенням. У Wooledge Wiki є гарне пояснення .
В основному, у прикладі, який ви маєте, ${0##*/}
перекладається як:
для змінної $ 0 і шаблону '/' два хеша означають з початку параметра, видаляють найдовший (або жадібний) збіг - до і включаючи шаблон.
Отже, звідки $0
ім'я файлу, напр. $HOME/documents/doc.txt
,, Параметр буде розгорнуто як:doc.txt
Аналогічно, для ${0%/*}
, шаблон /
узгоджується з кінцем параметра (the %
), при цьому видаляється найкоротше або не жадне збіг - що у наведеному вище прикладі дасть вам $HOME/documents
.
Дивіться також статтю у Вікі Баша Хакера .
*
) вказує на те, що все, що стосується шаблону, буде включено. Отже, для початку параметра, #
він знаходиться зліва та в кінці %
, працюючи в інший бік справа.
sh
.
basename
іdirname
? : D