当我运行以下shell脚本时,我总是将输出作为" grault"任何钥匙。 会出现什么问题?
谢谢!
#!/bin/bash
declare -a MYMAP
MYMAP=( [foo]=bar [baz]=quux [corge]=grault )
echo ${MYMAP[foo]}
echo ${MYMAP[baz]}
答案 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