zsh和动态变量

Luc*_*Luc 2 shell zsh

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

我定义了以下列表:

dev=(server1 user1 target1)
test=(server2 user2 target2)
prod=(server3 user3 target3)
Run Code Online (Sandbox Code Playgroud)

根据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
Run Code Online (Sandbox Code Playgroud)

任何的想法 ?

Gil*_*il' 6

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

您需要指定CONFIG为数组.由于您在zsh中工作,因此无需使用eval获取名称在变量中的变量的值.使用P 参数扩展标志.

CONFIG=(${(P)TARGET})
Run Code Online (Sandbox Code Playgroud)