バッシュ変数$ {0 ## * /}


8

私は${0##*/}bashスクリプトで遭遇した変数を理解しようとしています。

$0スクリプトの名前またはパスが含まれていることを理解し##${parameter##pattern}source)のように機能します。

しかし、私は/ここで何をしているのか理解できません。私はこの2つのスラッシュによる構文のキンクだけを知っています:${parameter/pat/string}

この変数をbashにエコーすると、次のようになりbashます。

最後に、スクリプトを共有する権限がありません。変数が呼び出さSOFT="${0##*/}"れてprintfステートメントで使用されているとだけ言いましょう"Error message sent by $SOFT"

回答:


12

これにより、前のパス要素がすべてカットされbasename $0ます。##プレフィックスパターンの最長一致展開を見つけようとします:

$ x=/a/b/c/d
$ echo ${x##*/}
d
$ basename $x
d

manページから:

${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ページを手に入れたのですか
サイコパンチ

試しman bashて検索したことがありparameter##ますか?
Anthon、

ええ、私はそうしましたman bashが、ばかげた私は探しました${ので、一致するものが見つかりませんでした。ありがとう。
サイコパンチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.