2011-12-04 44 views
2

我有一個TARGET變量可以設置爲dev,test或prod。zsh和動態變量

我定義了以下列表:

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