2013-08-14 13 views

cevap

1

Sen eval kullanabilirsiniz:

#!/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 Cato sözdizimi biraz daha ayrıntılı, ancak echo deyimi kendisi daha anlaşılır olduğunu. Bu iki çizgi ile çift for döngü iç kısmını değiştirin:

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

Kendisinin bir dizi olup olmadığını biliyor musunuz. Örneğin, $ a yerine $ {array_2 [$ j]} –

+0

@HaoShen ile değiştiriyorum: Bunu yaparken de herhangi bir sorun olmamalı. – jxh

+0

Merhaba, çok teşekkürler. Sadece sıkıştım. Sonucu bir değişkene atamak istersem ne olur? Örneğin, eval 'sonuç = $ {' "dizi_ $ a [$ i]" '} ". Bu işe yaramıyor ... Sürekli naif sorum için üzgünüm ... –

1

Ne önlemek için ilk dolar işareti önünde bir ters eğik çizgi koymak zorunda olduğunu eval

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

Not kullanabilirsiniz Kabuk bunu interpolasyondan. Söylemeye gerek

yok, diziler tüm amacı tüm karışıklık olmadan değişken enterpolasyon bu tip yapmak ve ben orijinal Bourne kabuğu ile diziler gerektiğinde yapmak zorunda gibi yankılanan evals arasında rahatsız olanak sağlamaktır. İlk karakter değişkeni değerlendirmek ve sonra da sonucunu kullanarak size fazladan bir seviyede kullanmak istediğinizi gösterir şekilde

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

!: Yapabileceğiniz

5

bir şey bu sözdizimini kullanmaktır ifadesi.

İlgili konular