检查 bash 中数组是否为空

Ker*_*hen 22 arrays bash if-statement

我想看看 bash 中的数组是否为空

key=[]
key1=["2014"]
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

[[ -z "$key" ]] && echo "empty" || echo "not Empty" 
[[ -z "$key1" ]] && echo "empty" || echo "not Empty"
Run Code Online (Sandbox Code Playgroud)

两者都返回“非空”

[[ $key==[] ]] && echo "empty" || echo "not Empty"
[[ $key1==[] ]] && echo "empty" || echo "not Empty"
Run Code Online (Sandbox Code Playgroud)

两人皆归empty

Ted*_*gmo 35

正如 @cheapner 在评论中指出的,您没有正确定义数组。

key=()
key1=("2014" "kdjg")
Run Code Online (Sandbox Code Playgroud)

key这里是一个空数组并且key12元素。

然后打印数组中的元素数量,分别是02

echo "${#key[@]}"
echo "${#key1[@]}"
Run Code Online (Sandbox Code Playgroud)

分别打印emptynot empty

if (( ${#key[@]} == 0 )); then
    echo empty
fi

if (( ${#key1[@]} != 0 )); then
    echo not empty
fi
Run Code Online (Sandbox Code Playgroud)

  • 如果您希望 POSIX 友好,也许可以使用“[ ${#key[@]} -eq 0 ]”,因为许多 shell 不支持“((算术))” (13认同)
  • @dawg是的,好吧,我倾向于使用我目前正在编程的语言中最方便的语言,我很少/从不尝试为一组相似的语言找到一个共同点,并且只使用该功能的子集。如果我使用“bash”,肯定会使用算术扩展。 (3认同)