Bash変数$ {0 ## * /}

遭遇した変数${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を実行しましたが、ばかげて、

一致するものが見つからなかったため、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です