【发布时间】:2014-09-09 15:40:21
【问题描述】:
我在访问关联 bash 数组中的键时遇到问题。
postgresql=(["host"]="foo" ["user"]="bar")
echo "USER: ${postgresql["user"]}" # bar
echo "HOST: ${postgresql["host"]}" # bar
如您所见,我为这两个键返回了bar。我在这里做错了吗?
【问题讨论】:
我在访问关联 bash 数组中的键时遇到问题。
postgresql=(["host"]="foo" ["user"]="bar")
echo "USER: ${postgresql["user"]}" # bar
echo "HOST: ${postgresql["host"]}" # bar
如您所见,我为这两个键返回了bar。我在这里做错了吗?
【问题讨论】:
使用declare -A 定义它:
$ declare -A postgresql=([host]='foo' [user]='bar')
$ echo "USER: ${postgresql["user"]}"
USER: bar
$ echo "HOST: ${postgresql["host"]}"
HOST: foo
注意关联数组是在 Bash 4 中引入的,因此如果您至少不使用该版本,它们将无法工作。更多信息在BashGuide -> Associative arrays。
我在下面引用chepner's very useful comment:
关联数组是在版本 4 中引入的,因此在 Mac OS X 中的默认 bash。注意没有声明,
postgresql是一个常规数组,并且索引被视为算术 表达式,因此字符串“index”被视为一个变量,其值 如果未设置变量,则为 0。您的代码只设置了第 0 个元素 多次。 – chepner 8 分钟前
【讨论】:
declare: -A: invalid option declare: usage: declare [-afFirtx] [-p] [name[=value] ...]
-a 用于索引数组,您使用的是哪个版本的 bash?
typeset -A 吗?更多信息mywiki.wooledge.org/BashFAQ/006
bash 中不可用。注意没有声明,postgresql 是一个常规数组,索引被视为算术表达式,因此如果未设置变量,则字符串“index”被视为值为 0 的变量。您的代码只是多次设置第 0 个元素。