BashスクリプトでPROG=${0##*/}はどういう意味ですか? [コピー]

BashスクリプトでPROG=${0##*/}はどういう意味ですか? [コピー]

PROG=${0##*/}シェルスクリプト名を解析するようですが、どのように機能するかはわかりません。 ${0}は最初または0番目の変数であることがわかります。

ベストアンサー1

tarabyteが意味するように、これはパラメータ拡張を処理する必要があります。

$ 0は、このスクリプトが実行される名前とパスです。たとえば、/usr/bin/example.sh を呼び出す場合、$0 は「/usr/bin/example.sh」です。現在の作業ディレクトリが/usrで、./bin/example.shを使用して同じスクリプトを呼び出すと、$ 0は "./bin/example.sh"になります。

「#」の場合、前に指定したプレフィックスを削除して $0 を拡張することを意味します。この場合、以前に指定したプレフィックスは* / globです。単一の「#」は貪欲ではないので、最初の* / globと一致した後に停止します。したがって、最初の「/」とその前のすべてのエントリが削除されます。 2 つの「#」はすべて削除 */ を意味します。したがって、すべての「/」が削除され、それ以前のすべての項目が検索されます。

要約修正: ${0##*/} は $(basename $0) と同じですが、追加のフォークはありません。

おすすめ記事