${!ARRAYNAME[@]}
vasıta "ARRAYNAME
endeksleri". bash man page'da belirtildiği gibi ARRAYNAME
'dan beri bir dizi değil, bir dizi olarak 0
döndürür. Bu, eval
kullanarak bir çözümdür.
#!/usr/bin/env bash
ARRAYNAME='FRUITS'
FRUITS=(APPLE BANANA ORANGE)
eval array=\(\${${ARRAYNAME}[@]} \)
for fruit in "${array[@]}"; do
echo ${fruit}
done
Ne başlangıçta yapmaya çalışıyorduk bir
Indirect Reference oluşturmak oldu. Bunlar, bash versiyon 2'de piyasaya sürüldü ve kabukta yansıma benzeri davranışlar elde etmeye çalışırken büyük ölçüde
eval
ihtiyacının yerini alması gerekiyordu.
Eğer değişken adı adresinden tahminim [@]
bulunur diziler ile dolaylı referanslar kullanırken yapmanız gereken şey:
#!/usr/bin/env bash
ARRAYNAME='FRUITS'
FRUITS=(APPLE BANANA ORANGE)
array="${ARRAYNAME}[@]"
for fruit in "${!array}"; do
echo $fruit
done
Bütün bunlar, bu Dolaylı Referansları kullanmak üzere bir şey önemsiz örnek, ancak Dennis Williamson tarafından sağlanan bağlantıda belirtildiği gibi, bunları gerçek dünyadaki betiklerde kullanmakta tereddüt etmelisiniz. Bunların hepsi, kodunuzu gereğinden daha karmaşık hale getirmeyi garanti eder. Genellikle bir İlişkisel Diziyle ihtiyacınız olan işlevselliği alabilirsiniz.
bakınız [BashFAQ/006] (http://mywiki.wooledge.org/BashFAQ/006). –