使用:
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’已经用于例子?
谢谢
EDITED
最简单的方式在我看来:
if test "${myArray['key_or_index']+isset}" then echo "yes" else echo "no" fi;
要检查元素是否设置(适用于索引和关联数组)
[ ${array[key]+abc} ] && echo "exists"
基本上$ {array [key] abc}是什么
> if array [key] is set,return abc
>如果array [key]未设置,则不返回任何值
参考文献:
>在Bash手册和小笔记中查看Parameter Expansion
if the colon is omitted,the operator tests only for existence [of parameter]
>这个答案实际上是从这个问题的答案改编的:How to tell if a string is not defined in a bash shell script?
包装函数:
exists(){ if [ "$2" != in ]; then echo "Incorrect usage." echo "Correct usage: exists {key} in {array}" return fi eval '[ ${'$3'[$1]+muahaha} ]' }
例如
if ! exists key in array; then echo "No such array element"; fi