ใช้อาเรย์ประเภทอื่น: แทนที่จะเป็นอาเรย์แบบจำนวนเต็มใช้อาเรย์แบบเชื่อมโยงดังนั้นคีย์ (ดัชนี) คือสิ่งที่คุณจะตรวจสอบ bash-4.0
หรือหลังจากนั้นจำเป็นสำหรับสิ่งนี้
declare -A array1=(
[prova1]=1 [prova2]=1 [slack64]=1
)
a=slack64
[[ -n "${array1[$a]}" ]] && printf '%s is in array\n' "$a"
ในตัวอย่างข้างต้นเราไม่สนใจค่านิยมเหล่านี้ แต่อย่างใดพวกเขาต้องไม่ว่างเปล่าสำหรับสิ่งนี้ คุณสามารถ "สลับ" อาเรย์ที่จัดทำดัชนีไว้ในอาเรย์แบบเชื่อมโยงใหม่โดยการแลกเปลี่ยนคีย์และค่า:
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"
สิ่งนี้สามารถชำระได้ถ้าคุณมีอาร์เรย์ขนาดใหญ่ที่ถูกค้นหาบ่อยๆเนื่องจากการใช้อาร์เรย์ที่เชื่อมโยงจะทำงานได้ดีกว่าลูปการสำรวจอาร์เรย์ มันจะไม่เหมาะกับทุกกรณีการใช้งานเพราะมันไม่สามารถจัดการรายการที่ซ้ำกัน (แม้ว่าคุณสามารถใช้ค่าเป็นตัวนับแทนที่จะเป็นเพียง 1 ข้างต้น) และมันไม่สามารถจัดการกับดัชนีที่ว่างเปล่า
แยกบรรทัดที่ซับซ้อนด้านบนเพื่ออธิบาย "การผกผัน":
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
ทำงานหรือไม่