In Bash test if associative array is declared
我想测试一个变量是否声明为关联数组。我看到了上面的讨论。但目前尚不清楚哪个最好。
以上链接中提到的以下内容,但不起作用。
declare -A x; [[ -v x[@] ]]; echo "$?"
这是昂贵的。它必须打印整个数据结构。数据量大时可能会很慢。
[[ "$(declare -p FOO 2>/dev/null)" == "declare -A"* ]]
检查变量是否为关联数组的最佳方法是什么?
编辑:下面的答案最适合 Bash 5。消息顶部链接上的结果已过时,Bash 5 应忽略这些方法。
答案 0 :(得分:3)
以下可用于测试bash变量是否为关联数组。
[[ ${x@a} = A ]]
${x@a}
可以用来测试它是变量还是数组。
$ declare x; echo "${x@a}"
$ declare -a y; echo "${y@a}"
a
$ declare -A z; echo "${z@a}"
A