shell脚本关联数组值覆盖

时间:2015-08-13 19:38:02

标签: bash shell associate

当我运行以下shell脚本时,我总是将输出作为" grault"任何钥匙。 会出现什么问题?

谢谢!

#!/bin/bash

declare -a MYMAP                             
MYMAP=( [foo]=bar [baz]=quux [corge]=grault ) 

echo ${MYMAP[foo]}

echo ${MYMAP[baz]}

2 个答案:

答案 0 :(得分:2)

使用-A

创建关联数组
declare -A MYMAP

请参阅:help declare

答案 1 :(得分:0)

另一个答案描述了如何正确地做到这一点,但这里解释了为什么你的例子表现得像。

declare -a创建一个索引数组,该数组只接受索引的整数。如果你提供一个字符串作为索引,它将忽略它并将其视为0! (我认为这是一个不好的行为,它应该只是给出一个错误)。

这就是您的代码转换为:

declare -a MYMAP # create indexed array                           
MYMAP=( [0]=bar [0]=quux [0]=grault ) 

echo ${MYMAP[0]} # grault

echo ${MYMAP[0]} # grault