我有一个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
有什么想法吗?
答案 0 :(得分:5)
eval CONFIG=\$$TARGET
将CONFIG
设置为字符串$TARGET
。在字符串上下文中展开数组时,结果是数组中值的串联,第一个字符IFS
作为分隔符插入。因此,在赋值后,CONFIG
的值为字符串server1 user1 target1
。
您需要将CONFIG
指定为数组。由于您在zsh中工作,因此无需使用eval
来获取名称在变量中的变量的值。使用P
parameter expansion flag。
CONFIG=(${(P)TARGET})