遭遇した変数${0##*/}
を理解しようとしていますbashスクリプトで。
$0
にスクリプトの名前またはパスが含まれていることを理解し、次に##
は${parameter##pattern}
(ソース)のように機能します。
しかし、わかりません。 /
がここで何をしているのか。私は2つのスラッシュを含むこの種類の構文しか知りません:${parameter/pat/string}
私がこの変数をbashでエコーすると、bash
🙂
最後に、スクリプトを共有する権限がありません。変数はSOFT="${0##*/}"
と呼ばれ、printf
ステートメント"Error message sent by $SOFT"
回答
これは、basename $0
します。 ##
は、プレフィックスパターンの最も長く一致する展開を見つけようとします。
$ x=/a/b/c/d $ echo ${x##*/} d $ basename $x d
マニュアルページから:
${parameter##word} Remove matching prefix pattern. The word is expanded to produce a pattern just as in pathname expansion. If the pattern matches the beginning of the value of parameter, then the result of the expansion is the expanded value of parameter with the shortest matching pattern (the ``#"" case) or the longest matching pat‐ tern (the ``##"" case) deleted.
${0##*/}
を使用する理由は、外部プログラム呼び出しを含まないためですが、何が起こっているのかがわかりにくくなっています。
コメント
一致するものが見つからなかったため、ありがとうございます。
man bash
を試しましたか。次に、parameter##
を検索しましたか?man bash
を実行しましたが、ばかげて、