よくわからないコードをbashで見ただけです。初心者のbashスクリプト作成者なので、何が起こっているのかわかりません。
echo ${0##/*}
echo ${0}
これら2つのコマンド(スクリプト名を出力)の出力に違いはありません。 #
コメントだけですか?そして、/*
。コメントの場合、終了の妨げにならない理由}
ブレース?
誰かがこの構文について私にいくつかの洞察を与えることはできますか?
Advanced Bash-Scripting Guide‡の サブストリングの削除 に関するセクションを参照してください。
${string#substring}
$string
の前からsubstring
の最短一致を削除します。${string##substring}
$string
の前からsubstring
の最長一致を削除します。
サブストリングには、すべてに一致するワイルドカード*
を含めることができます。式${0##/*}
は、スラッシュで始まる場合を除き、$0
の値を出力します。スラッシュで始まる場合は、何も出力されません。
2019ガイドは、2019年3月7日現在、substring
が変数の名前であるかのように、誤って$substring
であると主張しています。そうではありません:substring
は単なるパターンです。
${PARAMETER##Word} Results in removal of the longest matching pattern from the beginning rather than the shortest.
for example
[ian@pinguino ~]$ x="a1 b1 c2 d2"
[ian@pinguino ~]$ echo ${x#*1}
b1 c2 d2
[ian@pinguino ~]$ echo ${x##*1}
c2 d2
[ian@pinguino ~]$ echo ${x%1*}
a1 b
[ian@pinguino ~]$ echo ${x%%1*}
a
[ian@pinguino ~]$ echo ${x/1/3}
a3 b1 c2 d2
[ian@pinguino ~]$ echo ${x//1/3}
a3 b3 c2 d2
[ian@pinguino ~]$ echo ${x//?1/z3}
z3 z3 c2 d2
bash(1)
のmanページのParameter Expansion
セクションを参照してください。