bash中通过关联数组的foreach循环仅返回最后一个元素

Posted

技术标签:

【中文标题】bash中通过关联数组的foreach循环仅返回最后一个元素【英文标题】:foreach loop through associative array in bash only returns last element 【发布时间】:2013-05-17 07:38:08 【问题描述】:

这应该将整个关联数组打印到控制台:

#!/bin/sh

declare -a array=([key1]='value1' [key2]='value2')

for key in $!array[@]; do
    echo "Key = $key"
    echo "Value = $array[$key]"
done

echo $array[key1]
echo $array[key2]

它只打印最后一个变量:

[mles@sagnix etl-i_test]$ ./test.sh 
Key = 0
Value = value2
value2
value2

我的错在哪里?

@htor: Bash 版本是 3.2.25(1)-release。

【问题讨论】:

看看***.com/q/688849/1983854,这个有很多解决办法。 你确定 /bin/sh 实际上是 /bin/bash 吗?关联数组也是使用 -A 而不是 -a 构建的...请参阅下面的答案 /bin/sh 是我系统上 bash 的符号链接 你的 BASH 版本是什么?在您的问题中提供echo $BASH_VERSION 的输出。 【参考方案1】:

Bash 4 和更新版本支持关联数组。使用-a 选项声明的数组只是一个常规数组,可以用整数而不是键来索引。此声明导致数组包含一个元素 value2。当使用for key in $!array[@] 遍历键时,$key 的值是0,因此您会得到第一个元素。

鉴于尝试使用 -A 声明数组时得到的错误输出,我假设您的 Bash 版本早于 4。检查变量 $BASH_VERSION

有关数组的更深入解释,请参阅http://mywiki.wooledge.org/BashGuide/Arrays。

【讨论】:

【参考方案2】:
#!/bin/bash

declare -A array=([key1]='value1' [key2]='value2')

for key in $!array[@]; do
    echo "array[$key] = $array[$key]"
done

echo $array[key1]
echo $array[key2]

【讨论】:

这给了我一个错误./test.sh: line 3: declare: -A: invalid option declare: usage: declare [-afFirtx] [-p] [name[=value] ...] @mles:您没有使用bash 4 或更高版本。

以上是关于bash中通过关联数组的foreach循环仅返回最后一个元素的主要内容,如果未能解决你的问题,请参考以下文章

foreach 循环内的 while 循环仅返回 1 行

Lodash forEach 关联数组

foreach 循环仅输出数组中的最后一个元素

返回所有带有 ACF 字段和 foreach 循环的数组值

在 foreach 循环中未设置将数组转换为关联数组

请问php中如何用for循环遍历出关联数组,不要用foreach,用for循环哦