2011-12-04 13 views
2

私はdev、testまたはprodに設定できるTARGET変数を持っています。zshと動的変数

私は次のリストに定義:TARGETの値に応じ

dev=(server1 user1 target1) 
test=(server2 user2 target2) 
prod=(server3 user3 target3) 

を、私は動的リストのいずれかに変数CONFIGを関連付けるしたいと思います。

たとえば、TARGET = devとしましょう。私はそれを持っています

eval CONFIG=\$$TARGET # I expect CONFIG to be a list containing (server1 user1 target1) 
echo ${CONFIG[*]}  # OK, it gives (server1 user1 target1) 
echo ${CONFIG[1]} # I would expect to have "server1" but it returns "1", seems like CONFIG is not seen as a list 

ご存知ですか?

答えて

5

eval CONFIG=\$$TARGETCONFIGを文字列$TARGETに設定します。配列が文字列コンテキストで展開されると、結果は配列内の値の連結であり、最初の文字はIFSで区切り文字として挿入されます。したがって、割り当て後、CONFIGの値は文字列server1 user1 target1です。

CONFIGに割り当てる必要があります。 zshで作業しているので、変数に名前が含まれている変数の値を取得するのに、evalを使用する必要はありません。 Pparameter expansion flagを使用してください。

CONFIG=(${(P)TARGET}) 
+0

私が必要としたものです。どうもありがとう – Luc