你的declare -p技巧可能是唯一的方法来知道一个变量在被赋值之前已经被标记为declare -A(编辑:在Bash 5.0之前)。变量本身在您向数组中插入数据之前是未设置的,因此使用[[ -z ${var+x} ]]之类的典型技巧是行不通的。 如果您有Bash 5.0或更高版本,则显然存在expansion to test for an associative array。
$ declare x; echo "${x@a}"
$ declare -a y; echo "${y@a}"
a
$ declare -A z; echo "${z@a}"
A
要检查数组是否具有键,可以用途:
#!/bin/bash
declare -A arr1 arr2
arr1=( ["foo"]=bar )
if [[ "${!arr1[@]}" ]] ; then
echo "arr1 has keys"
fi
if [[ "${!arr2[@]}" ]] ; then
echo "arr2 has keys"
fi
# prints "arr1 has keys"
3条答案
按热度按时间dzjeubhm1#
不使用子shell的多种方式:
要确保
dictionary
已声明且为关联数组:roejwanj2#
你的
declare -p
技巧可能是唯一的方法来知道一个变量在被赋值之前已经被标记为declare -A
(编辑:在Bash 5.0之前)。变量本身在您向数组中插入数据之前是未设置的,因此使用[[ -z ${var+x} ]]
之类的典型技巧是行不通的。如果您有Bash 5.0或更高版本,则显然存在expansion to test for an associative array。
要检查数组是否具有键,可以用途:
yvgpqqbh3#
我想我找到解决办法了
但也许有一个更地道的呢?