Zsh和动态变量

5
我有一个名为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个回答

11
eval CONFIG=\$$TARGETCONFIG设置为字符串$TARGET的值。在字符串环境中展开数组时,结果是数组中值的连接,并插入IFS的第一个字符作为分隔符。因此,在赋值之后,CONFIG的值是字符串server1 user1 target1
你需要将CONFIG分配为数组。由于您正在使用zsh,因此不需要使用eval来获取变量名为变量的值。使用P参数扩展标志。详情请查看:Parameter Expansion Flags
CONFIG=(${(P)TARGET})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接