${!FOO}
で二重置換を実行しますbash
。つまり、FOOの(文字列)値を取得し、変数名として使用します。
zsh
この機能をサポートしていません。
この作業をbash
andで同じにする方法はありzsh
ますか?
バックグラウンド:
次のような環境変数のリストがあります
PATH MAIL EDITOR
そして、最初に変数名を出力し、その後それらの値を出力したい。
これは動作しますbash
が、動作しませんzsh
:
for VAR in LIST
do
echo $VAR
echo ${!VAR}
done
それは何とか「古い方法」で可能になるはずですがeval
、私はそれを動作させることができません:
for VAR in LIST
do
echo $VAR
echo `eval \$$VAR`
done
必要な${${VAR}}
場合でも${${${VAR}}}
必要な場合でも、単純に任意の深い置換を実行できない理由を理解することは決してないので、そのための説明もいいでしょう。
bash
、それは確かに同じ機能を(そしてもっとたくさん)持っており、異なるパターン、すなわちを使用しています${(p)FOO}
。
(e)
パラメーター拡張フラグは(P)
、3.1.5-pws-7(1999)のフラグであるzsh-2.6-beta17(1996年5月)に追加されました。${!var}
2.0のbash (1996年12月)。