3

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

#!/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。

4

2 回答 2

6

Bash 4 和更新版本支持关联数组。使用该选项声明的数组-a只是一个可以按整数索引的常规数组,而不是键。这个声明导致数组只有一个元素value2。当迭代具有 is 值的键时,您for key in ${!array[@]}将获得第一个元素。$key0

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

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

于 2013-05-22T13:08:23.277 回答
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]}
于 2013-05-22T09:56:32.027 回答