8

私はこれに頭を悩ませています、それについて話しているbashリファレンスを見つけることができません。

以下のコードで

host_color=${uphost}_host_color
host_color=${!host_color}

2行目は何をしていますか?この場合、!operatorは何をしますか?

4

2 に答える 2

9

これは、間接参照の短縮形です。

$ foo=bar
$ bar=bas
$ echo ${!foo}
bas

一見似ているように見える構造${!foo *}は、名前がfooで始まるすべての変数の名前に展開されます。

$ foo1=x
$ foo2=y
$ echo ${!foo*}
foo1 foo2
于 2012-04-25T13:47:32.487 に答える
1

バッシュマニュアルから:

パラメーターの最初の文字が感嘆符(!)の場合、可変間接レベルのレベルが導入されます。Bashは、残りのパラメーターから形成された変数の値を変数の名前として使用します。次に、この変数が展開され、パラメーター自体の値ではなく、その値が残りの置換で使用されます。これは、間接拡張として知られています。これに対する例外は、以下で説明する$ {!prefix*}と${!name[@]}の拡張です。

于 2012-04-25T13:45:49.067 に答える