私はこれに頭を悩ませています、それについて話しているbashリファレンスを見つけることができません。
以下のコードで
host_color=${uphost}_host_color
host_color=${!host_color}
2行目は何をしていますか?この場合、!operatorは何をしますか?
私はこれに頭を悩ませています、それについて話しているbashリファレンスを見つけることができません。
以下のコードで
host_color=${uphost}_host_color
host_color=${!host_color}
2行目は何をしていますか?この場合、!operatorは何をしますか?
これは、間接参照の短縮形です。
$ foo=bar
$ bar=bas
$ echo ${!foo}
bas
一見似ているように見える構造${!foo *}は、名前がfooで始まるすべての変数の名前に展開されます。
$ foo1=x
$ foo2=y
$ echo ${!foo*}
foo1 foo2
バッシュマニュアルから:
パラメーターの最初の文字が感嘆符(!)の場合、可変間接レベルのレベルが導入されます。Bashは、残りのパラメーターから形成された変数の値を変数の名前として使用します。次に、この変数が展開され、パラメーター自体の値ではなく、その値が残りの置換で使用されます。これは、間接拡張として知られています。これに対する例外は、以下で説明する$ {!prefix*}と${!name[@]}の拡張です。