С zsh
:
if ((${#${(u)ARRAY_DISK_Quantity[@]}} == 1)); then
echo OK
else
echo not OK
fi
Где (u)
флаг расширения параметра для расширения уникальных значений. Таким образом, мы получаем количество уникальных значений в массиве.
Замените == 1
на <= 1
, если вы хотите считать пустой массив в порядке.
С помощью 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
(будет работать со всеми подобными Борну оболочками с поддержкой массивов (ksh, zsh, bash, yash)).
Обратите внимание, что он возвращает ОК для пустого массива. Добавьте [ "$#" -gt 0 ] || return
в начале функции, если вы этого не хотите.