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

mle*_*les 3 arrays bash shell

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

#!/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]}
Run Code Online (Sandbox Code Playgroud)

相反,它打印oly最后一个变量:

[mles@sagnix etl-i_test]$ ./test.sh 
Key = 0
Value = value2
value2
value2
Run Code Online (Sandbox Code Playgroud)

我的错在哪里?

@htor:Bash版本是3.2.25(1) - 发布.

小智 6

Bash 4及更新版本支持关联数组.使用该-a选项声明的数组只是一个常规数组,可以用整数而不是键来索引.此声明导致数组包含一个元素value2.当迭代使用for key in ${!array[@]}值为$keyis 的键时,0您将获得第一个元素.

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

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