2011-12-04 5 views
2

dev, test 또는 prod로 설정할 수있는 TARGET 변수가 있습니다. 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 문자열 $TARGETCONFIG을 설정합니다. 배열이 문자열 컨텍스트에서 확장되면 결과는 배열에있는 값의 연결이며 첫 번째 문자는 IFS이며 구분 기호로 삽입됩니다. 따라서 할당 후 CONFIG 값은 server1 user1 target1 문자열입니다.

CONFIG에 배열로 지정해야합니다. zsh에서 일하기 때문에 eval을 사용하여 이름이 변수에있는 변수의 값을 얻을 필요가 없습니다. Pparameter expansion flag을 사용하십시오.

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

정확히 내가 필요한 것. 고마워. – Luc