2013-05-02 2 views
1

bash의 변수 변수에 대해 도움을 요청하고 싶습니다. 그것에 관한 몇 가지 기사를 읽었지 만, 제 경우에는 그것을하는 법을 모르겠습니다. 내 문제를 보자 :BASH의 변수 변수

배열에 다른 배열의 이름이 포함되어 있으며이 배열의 값을 인쇄하려고합니다. 내부에서는 가변 변수가 필요합니다.

#!/bin/bash 
declare -a array=(dir1 dir2 dir3) 
declare -a dir1=(1 2 3) 
declare -a dir2=(a b c) 
declare -a dir3=(9 8 7) 

for elem1 in "${array[@]}" 
do 
    for elem2 in "${variableVariable[@]}" 
    do 
    echo "$elem1 : $elem2" 
    done 
done 

출력이 떠들썩한 파티의 간접 변수 기능을 사용하여 수행 할 수있는이

 
dir1 : 1 
dir1 : 2 
dir1 : 3 
dir2 : a 
dir2 : b 
dir2 : c 
dir3 : 9 
dir3 : 8 
dir3 : 7 
+2

이 경우 변수 변수를 사용하지 마십시오. [연관 배열] (http://stackoverflow.com/questions/1494178/how-to-define-hash-tables-in-bash)을 사용하십시오. – Alex

+1

가능한 [이름으로 셸 변수를 간접적으로 조회] (http://stackoverflow.com/questions/1694196/lookup-shell-variables-by-name-indirectly) – tripleee

+0

감사합니다! 링크가 유용합니다! – SayusiAndo

답변

6

과 같이해야한다.

for elem1 in "${array[@]}" 
do 
    elems=$elem1'[@]' 
    for elem2 in "${!elems}" 
    do 
    echo "$elem1 : $elem2" 
    done 
done 

이것은 bash 확장이며 다른 쉘과 호환되지 않습니다.

+0

나는 그것을 살펴볼 것이다. 창에서 git 쉘 스크립트를 실행하고 싶습니다. – SayusiAndo

0

마지막으로 해결책을 찾았습니다. 나는 다른 문법을 다룰 수 없었기 때문에 eval을 사용해야했다. 나는 ${!variable}${variable[@]}의 구성을 의미한다.

#!/bin/bash 
declare -a array=(dir1 dir2 dir3) 
declare -a dir1=(1 2 3) 
declare -a dir2=(a b c) 
declare -a dir3=(9 8 7) 

for elem1 in "${array[@]}" 
do 
    for elem2 in `eval echo \$\{$elem1\[@\]\}"` 
    do 
    echo "$elem1 : $elem2" 
    done 
done