С помощью:
set -o nounset
1) Наличие индексированного массива, такого как:
myArray=( "red" "black" "blue" )
Какой самый короткий способ проверить, установлен ли элемент 1?
Я иногда использую следующее:
test "${#myArray[@]}" -gt "1" && echo "1 exists" || echo "1 doesn't exist"
Я хотел бы знать, есть ли предпочтительный.
2) Как бороться с непоследовательными индексами?
myArray=()
myArray[12]="red"
myArray[51]="black"
myArray[129]="blue"
Как быстро проверить, что "51" уже установлен, например?
3) Как бороться с ассоциативными массивами?
declare -A myArray
myArray["key1"]="red"
myArray["key2"]="black"
myArray["key3"]="blue"
Как быстро проверить, что "key2" уже используется, например?
Спасибо
РЕДАКТИРОВАНИЕ
Мне кажется, самый простой способ:
if test "${myArray['key_or_index']+isset}"
then
echo "yes"
else
echo "no"
fi;
Это работает как для индексированных, так и для ассоциативных массивов. Ошибки не отображаются с установленным -o существительным.
Благодаря DoubleDown за заголовок.