シェルスクリプトで見つけた次の正規表現についてかなり混乱しています。
${0##*/}
${0%/*}
彼らはどのように機能しますか?
シェルスクリプトで見つけた次の正規表現についてかなり混乱しています。
${0##*/}
${0%/*}
彼らはどのように機能しますか?
回答:
これらは正規表現ではなく、Bashのパラメーター拡張の例です。変数またはその値による特別なパラメーターの置換です。Wooledge Wikiには良い説明があります。
基本的に、あなたが持っている例では、次のように${0##*/}
翻訳します:
変数$ 0およびパターン '/'の場合、2つのハッシュはパラメーターの先頭から意味し、パターンまでの最長(または貪欲な)一致を削除します。
したがって、$0
ファイルの名前(例:)は$HOME/documents/doc.txt
、次のようにパラメーターが展開されます。doc.txt
同様に、の${0%/*}
場合、パターン/
はパラメーターの終わり(%
)に一致し、最短または貪欲でない一致が削除されます-上記の例ではが表示されます$HOME/documents
。
Bash Hacker's Wikiの記事も参照してください。
*
)は、パターンを含むすべてのパターンが削除されることを示します。したがって、パラメータの開始時は#
、それは左側にあり、終了時は%
、右側から逆に機能します。
sh
ます。
basename
、dirname
?:D