2013-08-14 14 views

Odpowiedz

1

Można użyć 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 

Vaughn składnia Cato jest nieco bardziej rozwlekły, ale samo stwierdzenie echo jest bardziej odczytania. Wymienić wewnętrzną część podwójnej for pętli z tych dwóch linii:

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

Czy wiesz, co jeśli sama jest tablicą. Na przykład zamieniam $ a na $ {array_2 [$ j]} –

+0

@HaoShen: Nie powinno być problemu z tym, dla żadnego rozwiązania. – jxh

+0

Cześć, wielkie dzięki. Po prostu utknąłem. Co jeśli chcę przypisać wynik do zmiennej. Na przykład eval 'result = $ {' "array_ $ a [$ i]" '}'. To nie działa ... Przepraszam za moje ciągłe naiwne pytanie ... –

1

Można użyć eval

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

Zauważ, że musiałem wprowadzić odwrotny ukośnik przed pierwszym znakiem dolara, aby zapobiec skorupa z interpolacji tego.

trzeba dodawać, że głównym celem tablic jest umożliwienie, aby zrobić ten rodzaj zmiennej interpolacji bez całego zamieszania i przeszkadza odbijające evals jak miałem zrobić, kiedy potrzebne tablice z oryginalnej powłoki Bourne.

5

Jedną rzeczą, jaką można zrobić, to skorzystać z tej składni:

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

! jako pierwszy znak wskazuje, że chcesz użyć dodatkowy poziom pośredni poprzez ocenę zmienną, a następnie za pomocą rezultat jako wyrażenie.

Powiązane problemy