zsh和动态变量

时间:2011-12-04 15:42:08

标签: shell zsh

我有一个TARGET变量,可以设置为dev,test或prod。

我定义了以下列表:

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

根据TARGET的值,我想动态地将变量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

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

eval CONFIG=\$$TARGETCONFIG设置为字符串$TARGET。在字符串上下文中展开数组时,结果是数组中值的串联,第一个字符IFS作为分隔符插入。因此,在赋值后,CONFIG的值为字符串server1 user1 target1

您需要将CONFIG指定为数组。由于您在zsh中工作,因此无需使用eval来获取名称在变量中的变量的值。使用P parameter expansion flag

CONFIG=(${(P)TARGET})