shell 脚本中的字典仅显示最后一个关联项

shell 脚本中的字典仅显示最后一个关联项

我正在尝试使用字典并偶然发现了一种奇怪的行为。当我创建这样的字典时:

declare -A servers
servers=( ["omega"]="dev" ["delta"]="test" ["beta"]="ppd" ["alpha"]="prd" )


echo "${servers["omega"]}"

最后一个元素“prd”将被打印到屏幕上,而不是第一个。删除除第一个条目之外的所有条目将得到正确的输出。我不确定我做错了什么,因为我看过的每个代码示例都使用如上所述的字典。有人能发现我的错误吗?

问候

答案1

我认为@Yurko 的评论是正确的。

对于版本 4 之前的 bash(例如/bin/bash在 Mac 上):

  1. declare -A行将发出错误 ( declare: -A: invalid option) 并且数组是未申报
  2. 第二行将创建一个索引数组:因为索引被计算为算术表达式
  3. 在 bash 算术表达式中:“裸”字被视为变量名称;未设置的变量被赋予零值

因此,每个字符串都被分配给索引0

尝试这个:

declare -p servers

你应该看到输出

declare -a servers='([0]="prd")'

相关内容