web-dev-qa-db-ja.com

$ {0 ## * /}と$ {0%/ *}はどのように機能しますか?

シェルスクリプトで見つけた次の正規表現について、私はかなり混乱しています。

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

それらはどのように機能しますか?

38
user785099

これらは正規表現ではなく、Bashのパラメーター展開の例です。その値による変数または特殊パラメーターの置換。 Wooledge Wikiには 良い説明 があります。

基本的に、あなたが持っている例では、${0##*/}は次のように変換されます:

変数$ 0とパターン '/'の場合、2つのハッシュはパラメーターのbeginningからの平均であり、最長(または貪欲)一致を削除します—パターンまで。

したがって、$0がファイルの名前、たとえば$HOME/documents/doc.txtの場合、パラメータは次のように展開されます:doc.txt

同様に、${0%/*}の場合、パターン/はパラメーター(the %)のendと照合されます。最短または貪欲でない一致が削除された状態で–上記の例では$HOME/documentsになります。

Bash Hacker's Wiki に関する記事も参照してください。

42
jasonwryan