【问题标题】:How to access associative arrays in bash如何在 bash 中访问关联数组
【发布时间】:2014-09-09 15:40:21
【问题描述】:

我在访问关联 bash 数组中的键时遇到问题。

postgresql=(["host"]="foo" ["user"]="bar")

echo "USER: ${postgresql["user"]}" # bar
echo "HOST: ${postgresql["host"]}" # bar

如您所见,我为这两个键返回了bar。我在这里做错了吗?

【问题讨论】:

    标签: bash associative-array


    【解决方案1】:

    使用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?
    • @kyledecot 它需要 bash 4。你可以试试 typeset -A 吗?更多信息mywiki.wooledge.org/BashFAQ/006
    • 关联数组是在版本 4 中引入的,因此在 Mac OS X 的默认 bash 中不可用。注意没有声明,postgresql 是一个常规数组,索引被视为算术表达式,因此如果未设置变量,则字符串“index”被视为值为 0 的变量。您的代码只是多次设置第 0 个元素。
    • 我明白了。很高兴知道。感谢大家的帮助!
    猜你喜欢
    • 1970-01-01
    • 2017-09-16
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2011-04-20
    相关资源
    最近更新 更多