Con zsh
:
if ((${#${(u)ARRAY_DISK_Quantity[@]}} == 1)); then
echo OK
else
echo not OK
fi
Dove si (u)
trova un flag di espansione dei parametri per espandere valori univoci . Quindi stiamo ottenendo un conteggio dei valori univoci nella matrice.
Sostituisci == 1
con <= 1
se vuoi considerare che un array vuoto è OK.
Con ksh93
, è possibile ordinare l'array e verificare che il primo elemento sia uguale all'ultimo:
set -s -- "${ARRAY_DISK_Quantity[@]}"
if [ "$1" = "${@: -1}" ]; then
echo OK
else
echo not OK
fi
Con ksh88 o pdksh / mksh:
set -s -- "${ARRAY_DISK_Quantity[@]}"
if eval '[ "$1" = "${'"$#"'}" ]'; then
echo OK
else
echo not OK
fi
Con bash
, probabilmente avresti bisogno di un ciclo:
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
(funzionerebbe con tutte le shell tipo Bourne con supporto array (ksh, zsh, bash, yash)).
Si noti che restituisce OK per un array vuoto. Aggiungere un[ "$#" -gt 0 ] || return
a all'inizio della funzione se non lo desideri.