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循环仅返回最后一个元素的主要内容,如果未能解决你的问题,请参考以下文章