foreach循环只返回最后一个元素
问题描述:
这应该打印整个关联数组到控制台:foreach循环只返回最后一个元素
#!/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]}
相反,它打印OLY最后一个变量:
[[email protected] etl-i_test]$ ./test.sh
Key = 0
Value = value2
value2
value2
哪里是我的故障?
@htor: Bash版本是3.2.25(1) - 释放。
答
在Bash 4和更新版本中支持关联数组。使用-a
选项声明的数组只是一个常规数组,可以使用整数索引,而不是键。这个声明导致数组有一个元素value2
。使用for key in ${!array[@]}
迭代密钥时,$key
的值为0
,因此您将获得第一个元素。
鉴于在尝试使用-A
声明数组时遇到错误输出,我假定您的Bash版本大于4.检查变量$BASH_VERSION
。
有关阵列的更深入的说明,请参阅http://mywiki.wooledge.org/BashGuide/Arrays。
答
#!/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]}
看看http://stackoverflow.com/q/688849/1983854,有很多解决方案。 – fedorqui
你确定/ bin/sh实际上是/ bin/bash吗?还有关联数组是使用'-A'而不是'-a'构建的......看到下面的回答 –
/bin/sh是我系统上bash的符号链接 – mles