Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何测试bash中的变量是关联数组?_Bash - Fatal编程技术网

如何测试bash中的变量是关联数组?

如何测试bash中的变量是关联数组?,bash,Bash,我想测试变量是否声明为关联数组。我看到上面的讨论。但不清楚哪一个是最好的 下面提到了上述链接,但不起作用 declare -A x; [[ -v x[@] ]]; echo "$?" 这是昂贵的。它必须打印整个数据结构。当数据较大时,速度可能较慢 [[ "$(declare -p FOO 2>/dev/null)" == "declare -A"* ]] 检查变量是否为关联数组的最佳方法是什么 编辑:下面的答案是Bash5的最

我想测试变量是否声明为关联数组。我看到上面的讨论。但不清楚哪一个是最好的

下面提到了上述链接,但不起作用

declare -A x; [[ -v x[@] ]]; echo "$?"
这是昂贵的。它必须打印整个数据结构。当数据较大时,速度可能较慢

[[ "$(declare -p FOO 2>/dev/null)" == "declare -A"* ]]
检查变量是否为关联数组的最佳方法是什么


编辑:下面的答案是Bash5的最佳答案。消息顶部链接上的结果已过时,对于Bash 5应忽略这些方法。

以下内容可用于测试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

以下内容可用于测试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

我认为这是Bash5.0的一个特性,不能移植回3.x或4.x系列,这是正确的吗?我不知道它能追溯到多早。我只有bash 5要测试。说得清楚一点,我很确定你可以将此作为现有问题的新答案添加(将其扩展到比现有答案更新的bash版本)…后缀扩展主要作为一个组添加在5.0中。
@
后缀扩展。我认为与旧线程合并不是一个好主意。这些问题的答案都没有实际意义。不能同时给出坏答案和好答案,这太糟糕了。旧的错误答案应该被忽略。这个问题不应该结束。我是否正确地认为这是bash 5.0的一个功能,不能移植回3.x或4.x系列?我不确定它可以追溯到多早。我只有bash 5要测试。说得清楚一点,我很确定你可以将此作为现有问题的新答案添加(将其扩展到比现有答案更新的bash版本)…后缀扩展主要作为一个组添加在5.0中。
@
后缀扩展。我认为与旧线程合并不是一个好主意。这些问题的答案都没有实际意义。不能同时给出坏答案和好答案,这太糟糕了。旧的错误答案应该被忽略。此问题不应关闭。请将您的(有用!)答案添加到先前存在的问题。否。这是个很糟糕的主意。怎么会这样?合并问题的目的是获得更多的关注——现在,看到现有问题的人将无法找到你的答案。因为现有问题有更多的眼睛(更多的视图,更多的出现在搜索引擎索引中——并且已经是其他重复标志的目标),如果你不移动答案,我会在那里建立我自己的版本,但最好是你自己获得学分,因为你做了这项研究。请在先前存在的问题上添加你的(有用的!)答案。否。这是个很糟糕的主意。怎么会这样?合并问题的目的是获得更多的关注——现在,看到现有问题的人将无法找到你的答案。因为现有问题有更多的眼睛(更多的视图,更多的出现在搜索引擎索引中——并且已经是其他重复标志的目标),如果你不移动答案,我会在那里建立我自己的版本,但是你最好自己获得荣誉,因为你做了研究。