![BashスクリプトでPROG=${0##*/}はどういう意味ですか? [コピー]](https://linux33.com/image/68551/Bash%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%A7PROG%3D%24%7B0%23%23*%2F%7D%E3%81%AF%E3%81%A9%E3%81%86%E3%81%84%E3%81%86%E6%84%8F%E5%91%B3%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
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) と同じですが、追加のフォークはありません。