2

当我运行以下 shell 脚本时,我总是得到任何键的“grault”输出。会有什么问题?

谢谢!

#!/bin/bash

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

echo ${MYMAP[foo]}

echo ${MYMAP[baz]}
4

2 回答 2

3

创建一个关联数组-A

declare -A MYMAP

看:help declare

于 2015-08-13T19:41:56.593 回答
1

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

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

所以这就是您的代码翻译成的内容:

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

echo ${MYMAP[0]} # grault

echo ${MYMAP[0]} # grault
于 2018-02-17T01:03:14.080 回答