2013-08-14 2 views

답변

1

당신은 eval를 사용할 수 있습니다

#!/bin/bash 
array_0=(1 2 3) 
array_1=(4 5 6) 
array_2=(7 8 9) 
for a in {0..2} ; do 
    for i in {0..2} ; do 
    eval 'echo ${'"array_$a[$i]"'}' 
    done 
done 

본이 카토의 구문이 약간 더 자세한이지만, echo 문 자체가 더 해독입니다. 당신은이 두 라인 이중 for 루프의 내부 부품을 교체 :

array_a=array_$a[$i] 
    echo ${!array_a} 
+0

자체가 배열 인 경우 어떤 항목인지 압니까? 예를 들어, $ a를 $ {array_2 [$ j]} –

+0

으로 바꿉니다. @HaoShen : 두 가지 방법 모두 문제가 없습니다. – jxh

+0

안녕하세요. 고맙습니다. 방금 막혔다. 변수에 결과를 지정하려면 어떻게해야합니까? 예를 들어, eval 'result = $ {' "array_ $ a [$ i]" '}'. 그것은 작동하지 않습니다 ... 내 연속 질문에 대한 미안 ... –

1

당신은 내가 방지하기 위해 첫번째 달러 기호 앞에 역 슬래시를 추가했다 그 eval

echo $(eval echo \${array_$a[0]}) 

주를 사용할 수 있습니다 그 보간에서 껍질.

물론 어레이의 모든 목적은 변수 보간을 원래의 Bourne 셸로 배열을 필요로 할 때와 같이해야만했던 것처럼 모든 오류와 에코의 귀찮음없이 할 수있게하는 것입니다. 첫 번째 문자는 변수를 평가하고 다음과 같은 결과를 사용하여 당신은 간접의 추가 레벨을 사용할 것을 나타냅니다으로

array_a=array_$a[0] 
echo ${!array_a} 

! : 당신이 할 수있는

5

것은이 구문을 사용하는 것입니다 표현.

관련 문제