Com zsh
:
if ((${#${(u)ARRAY_DISK_Quantity[@]}} == 1)); then
echo OK
else
echo not OK
fi
Onde (u)
é um sinalizador de expansão de parâmetro para expandir valores exclusivos . Portanto, estamos obtendo uma contagem dos valores exclusivos na matriz.
Substitua == 1
por <= 1
se você deseja considerar que uma matriz vazia está OK.
Com ksh93
, você pode classificar a matriz e verificar se o primeiro elemento é o mesmo que o último:
set -s -- "${ARRAY_DISK_Quantity[@]}"
if [ "$1" = "${@: -1}" ]; then
echo OK
else
echo not OK
fi
Com ksh88 ou pdksh / mksh:
set -s -- "${ARRAY_DISK_Quantity[@]}"
if eval '[ "$1" = "${'"$#"'}" ]'; then
echo OK
else
echo not OK
fi
Com bash
, você provavelmente precisará de um loop:
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
(funcionaria com todos os shells semelhantes a Bourne com suporte a array (ksh, zsh, bash, yash)).
Observe que ele retorna OK para uma matriz vazia. Adicione um [ "$#" -gt 0 ] || return
no início da função, se você não quiser.