这应该将整个关联数组打印到控制台:
#!/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) - 发布。
答案 0 :(得分:6)
Bash 4及更新版本支持关联数组。使用-a
选项声明的数组只是一个常规数组,可以用整数而不是键来索引。此声明导致数组中包含一个元素value2
。当使用for key in ${!array[@]}
迭代密钥时,$key
的值为0
,因此您获得第一个元素。
考虑到在尝试使用-A
声明数组时得到的错误输出,我假设您的Bash版本早于4.检查变量$BASH_VERSION
。
有关数组的更深入解释,请参阅http://mywiki.wooledge.org/BashGuide/Arrays。
答案 1 :(得分:3)
#!/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]}