arrays - bash 关联数组需要语法错误操作数

标签 arrays bash associative-array

我有一个点文件名与 ids 的关联数组,看起来完全像这样:

declare -A ids=(
  [".steve"]="1 4 5 6 10"
  [".john"]="3 4 5 1 11"
  ...
)

当我运行此代码时,我得到:

./declare_ids.sh: line 23: .steve: operand expected (error token is ".steve")

这个错误看起来真的非常模糊。我不明白发生了什么事。我对 bash 很陌生,刚刚学习 bash v4 中的关联数组。有人可以帮忙吗?

编辑:

此脚本中的 shebang 行是 #!/bin/bash 。我正在 zsh 内运行它OS X 上的终端,我通过 brew install bash 安装了 bash .

bash --version说:

GNU bash, version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)                                                                                                │
Copyright (C) 2016 Free Software Foundation, Inc.                                                                                                              │
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>                                                                                  │
                                                                                                                                                               │
This is free software; you are free to change and redistribute it.                                                                                             │
There is NO WARRANTY, to the extent permitted by law.

当我输入 bash --version 时也是如此紧接在 declare -A 之前线。

which bash返回/usr/local/bin/bash 。只需输入 ./declare_ids.sh 即可在终端内调用该脚本。 .

再次编辑:

正如已经说过的,呼应 $BASH_VERSIONbash --version 不同。 $BASH_VERSION是 3.2.57(1)-版本。

有没有办法让/bin/bash升级?我也在 ubuntu CircleCI 盒子上使用这个脚本,所以任何硬编码到什么 brew确实会很糟糕。

最佳答案

最可能的解释是您的 bash 版本太旧,无法实现关联数组,例如,如果您使用 OS X 的默认版本,则可能会出现这种情况。

通过输入以下命令获取正在运行的 bash 的最终版本:

echo $BASH_VERSION

紧接在声明-A之前。 (您还可以使用命令 /path/to/bash --version,其中 /path/to/bash 是 shebang 行中的完整路径;在本例中/bin/bash)

确实,错误消息不太容易解释,但是旧版本需要时间旅行才能告诉您正在使用尚未添加到 shell 中的语法。该错误来自于 declare 内置函数将带括号的参数解释为索引数组,如果它看到 var=(,即使没有 ,它也会自动执行此操作-a 选项。在索引数组中,下标必须是数字(bash 术语中的整数),并且 [.steve] 不是数字。(引号不相关;[ "3"] 可以正常工作,因为 bash 允许您在数字表达式中引用数字。奇怪的是,[steve] 也可以正常工作,因为在数字表达式中,变量名不是定义的变量被视为 0。)

关于arrays - bash 关联数组需要语法错误操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43948064/

相关文章:

arrays - Golang-无效的数组绑定(bind)

c++ - 在函数内修改多维数组

linux - 尝试在没有阅读器的情况下编写时捕获 SIGPIPE

arrays - 在 BASH 中对另一个数组进行迭代期间使用变量动态命名数组

javascript - 当使用 Javascript 的 Reflect API 构建一个扩展另一个类的实例时,为什么索引数组是共享作用域?

c++ - std :string prevent me from carelessly stomping on its data?如何

python - 在 Python 2.7 中使用字节

linux - 将共享 NTFS 上的文件批量重命名为 Windows 风格的文件名

linux - nano编辑器保存后如何获取文件路径?

php - 在 PHP 的关联数组中是否有类似 keypath 的东西?