我正在尝试使用字典并偶然发现了一种奇怪的行为。当我创建这样的字典时:
declare -A servers
servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" )
echo "${servers["omega"]}"
最后一个元素“prd”将被打印到屏幕上,而不是第一个。删除除第一个条目之外的所有条目将得到正确的输出。我不确定我做错了什么,因为我看过的每个代码示例都使用如上所述的字典。有人能发现我的错误吗?
问候
答案1
我认为@Yurko 的评论是正确的。
对于版本 4 之前的 bash(例如/bin/bash
在 Mac 上):
- 该
declare -A
行将发出错误 (declare: -A: invalid option
) 并且数组是未申报。 - 第二行将创建一个索引数组:因为索引被计算为算术表达式
- 在 bash 算术表达式中:“裸”字被视为变量名称;未设置的变量被赋予零值
因此,每个字符串都被分配给索引0
。
尝试这个:
declare -p servers
你应该看到输出
declare -a servers='([0]="prd")'