Gunakan berbagai jenis array: daripada array yang diindeks integer, gunakan array asosiatif, jadi kuncinya (indeks) adalah apa yang akan Anda periksa. bash-4.0
atau lambat diperlukan untuk ini.
declare -A array1=(
[prova1]=1 [prova2]=1 [slack64]=1
)
a=slack64
[[ -n "${array1[$a]}" ]] && printf '%s is in array\n' "$a"
Di atas kita tidak terlalu peduli dengan nilai-nilai, mereka hanya perlu kosong untuk ini. Anda dapat "membalikkan" array yang diindeks ke dalam array asosiatif baru dengan menukar kunci dan nilai:
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"
Ini dapat membuahkan hasil jika Anda memiliki array besar yang sering dicari, karena penerapan array asosiatif akan lebih baik daripada loop array-traversing. Itu tidak akan cocok dengan setiap kasus penggunaan, karena tidak dapat menangani duplikat (meskipun Anda dapat menggunakan nilai sebagai penghitung, bukan hanya 1 seperti di atas), dan tidak dapat menangani indeks kosong.
Hancurkan garis kompleks di atas, untuk menjelaskan "inversi":
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
pekerjaannya?