Farklı türde bir dizi kullanın: tamsayı dizine alınmış bir dizi yerine, ilişkilendirilebilir bir dizi kullanın, böylece anahtar (dizin) kontrol edeceğiniz şeydir. bash-4.0
veya daha sonra bunun için gereklidir.
declare -A array1=(
[prova1]=1 [prova2]=1 [slack64]=1
)
a=slack64
[[ -n "${array1[$a]}" ]] && printf '%s is in array\n' "$a"
Yukarıda değerleri gerçekten önemsemiyoruz, sadece bunun için boş olmamaları gerekiyor. Anahtar ve değeri değiştirerek dizine alınmış bir diziyi yeni bir ilişkilendirilebilir diziye "tersine çevirebilirsiniz":
declare -a array1=(
prova1 prova2 slack64
)
declare -A map # required: declare explicit associative array
for key in "${!array1[@]}"; do map[${array1[$key]}]="$key"; done # see below
a=slack64
[[ -n "${map[$a]}" ]] && printf '%s is in array\n' "$a"
İlişkilendirilebilir dizilerin uygulanması, dizi geçişli döngülerden daha iyi performans göstereceğinden, sık aranan büyük dizileriniz varsa, bu işe yarayabilir. Yinelenenleri işleyemediğinden (değeri yukarıdaki gibi yalnızca 1 yerine sayaç olarak kullanabilirsiniz) ve boş bir dizini işleyemediği için her kullanım durumuna uygun olmaz.
"Ters çevirme" yi açıklamak için yukarıdaki karmaşık çizgiyi kırmak:
for key in "${!a[@]}" # expand the array indexes to a list of words
do
map[${a[$key]}]="$key" # exchange the value ${a[$key]} with the index $key
done
array1
?