ด้วยzsh
:
if ((${#${(u)ARRAY_DISK_Quantity[@]}} == 1)); then
echo OK
else
echo not OK
fi
(u)
ตำแหน่งการขยายพารามิเตอร์อยู่ที่ไหนเพื่อขยายค่าที่ไม่ซ้ำ ดังนั้นเราจะได้รับการนับค่าที่ไม่ซ้ำกันในอาร์เรย์
แทนที่== 1
ด้วย<= 1
คือคุณต้องการพิจารณาอาร์เรย์ว่างเปล่าเป็น OK
ด้วยksh93
คุณสามารถเรียงลำดับอาร์เรย์และตรวจสอบว่าองค์ประกอบแรกเหมือนกันกับครั้งสุดท้าย:
set -s -- "${ARRAY_DISK_Quantity[@]}"
if [ "$1" = "${@: -1}" ]; then
echo OK
else
echo not OK
fi
ด้วย ksh88 หรือ pdksh / mksh:
set -s -- "${ARRAY_DISK_Quantity[@]}"
if eval '[ "$1" = "${'"$#"'}" ]'; then
echo OK
else
echo not OK
fi
ด้วยbash
คุณอาจต้องวนซ้ำ:
unique_values() {
typeset i
for i do
[ "$1" = "$i" ] || return 1
done
return 0
}
if unique_values "${ARRAY_DISK_Quantity[@]}"; then
echo OK
else
echo not OK
fi
(จะทำงานกับเชลล์เหมือน Bourne ทั้งหมดที่มีการสนับสนุนอาร์เรย์ (ksh, zsh, bash, yash))
โปรดทราบว่ามันจะส่งคืนตกลงสำหรับอาร์เรย์ที่ว่างเปล่า เพิ่ม[ "$#" -gt 0 ] || return
ที่จุดเริ่มต้นของฟังก์ชันหากคุณไม่ต้องการ