【问题标题】:Bash associative dictionary not working (declare: -A: invalid option)Bash 关联字典不起作用(声明:-A:无效选项)
【发布时间】:2017-04-06 20:46:29
【问题描述】:

我已经按照每个 bash 字典示例进行了操作,但没有一个会起作用。我现在有

_配置:

#!/bin/bash


instance_map["dev"]=project-dev
instance_map+=( ["stage"]="project-staging" )

declare -A animals=( ["moo"]="cow" ["woof"]="dog")

test.sh:

#!/bin/bash

source _CONFIG


echo ${instance_map["dev"]}
echo ${instance_map["stage"]}


echo "${animals[moo]}"
for sound in "${!animals[@]}"; do echo "$sound - ${animals[$sound]}"; done

由于某种原因,在遵循每个示例之后,我得到了

$ ./test.sh dev
_CONFIG: line 9: declare: -A: invalid option
declare: usage: declare [-afFirtx] [-p] [name[=value] ...]
project-devproject-staging
project-devproject-staging
dog
0 - dog

$ bash --version
GNU bash, version 4.4.0(1)-release (x86_64-apple-darwin15.6.0)

如何在 Bash 中将用户输入“dev”映射到“myprojectname”?

【问题讨论】:

  • 您已经安装了第二个 bash。但脚本使用默认的/bin/bash。 (舍邦)。默认值为 3.2(不知道 -A)。当您键入 bash --version 时,将搜索 PATH 并执行您准备的 bash ...将您的 shebang 更改为 #!/usr/bin/env bash 或更改路径,例如 #!/usr/local/bin/bash
  • 你可以接受我的回答,如果你愿意,我会接受
  • 自己接受吧。您可以接受自己的答案:) :)

标签: bash macos dictionary


【解决方案1】:

问题已通过升级 bash 得到解决。 $BASH_VERSION 打印你的真实版本

brew unlink bash
brew update && brew install bash

test.sh:

declare -A instance_map=( ["dev"]="project-dev" ["stage"]="project-staging" ["prod"]="project" )

echo ${instance_map["dev"]}
echo ${instance_map["stage"]}

【讨论】:

  • 我已经更新到 bash v5,但我的仍然无法工作,bash --version 显示 bash 是 v5。如上所示运行 test.sh 会产生:-bash: declare: -A: invalid option declare: usage: declare [-afFirtx] [-p] [name[=value] ...]
  • @EricGreen 您可能安装了两个版本的 bash。 test.sh 正在调用 /bin/bash,如果您只是运行 bash,这可能与运行的不同。要查看键入 bash 时正在运行的内容,请尝试 which bash
猜你喜欢
  • 2011-08-28
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多