2011-12-04 1 views
2

У меня есть переменная TARGET, которая может быть установлена ​​на dev, test или prod.zsh и динамическая переменная

Я определил следующие списки:

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 

Любая идея?

ответ

5

eval CONFIG=\$$TARGET комплекты CONFIG к строке $TARGET. Когда массив расширяется в контексте строки, результатом является конкатенация значений в массиве с первым символом IFS, вставленным в качестве разделителя. Таким образом, после присвоения значение CONFIG представляет собой строку server1 user1 target1.

В качестве массива необходимо назначить CONFIG. Поскольку вы работаете в zsh, вам не нужно использовать eval, чтобы получить значение переменной, имя которой находится в переменной. Используйте Pparameter expansion flag.

CONFIG=(${(P)TARGET}) 
+0

Отлично, что мне нужно. большое спасибо – Luc