【问题标题】:Bash: append (+=) to nameref (-n) to hash keyBash:将 (+=) 附加到 nameref (-n) 到哈希键
【发布时间】:2021-07-22 10:22:10
【问题描述】:

在 bash 5.0.17 中,

s='X'; declare -n s2=s
s2+=YYY; declare -p s

正确生成declare -- s="XYYY"。到目前为止,一切都很好。现在,如果我为关联数组键创建一个 nameref 怎么办?

declare -A aa
aa=( [k1]=v1 ); declare -n 'nk1=aa[k1]'
nk1+=YYY; declare -p aa

(我认为引号是必需的,否则会发生文件名扩展——使用shopt -s nullglob 进行测试)。这会产生

declare -A aa=([k1]="v1aa[k1]YYY" )

这种声明 nameref(或附加)的语法是否错误?

【问题讨论】:

    标签: bash associative-array indirection


    【解决方案1】:

    我无法使用bash 4.4.20 进行复制:

    $ declare -A aa=( [k1]=v1 )
    $ declare -n 'nk1=aa[k1]'
    $ nk1+=YYY
    $ declare -p aa
    declare -A aa=([k1]="v1YYY" )
    

    但是,在带有bash 5.1.4 的系统上,我得到declare -A aa=([k1]="v1aa[k1]YYY" ),就像您在5.0.17 中看到的一样。因此,似乎在 5.X 系列中的某个时间点引入了一个错误。

    【讨论】:

    • @usretc 实际上,我想我完全不在这儿了。
    • @usretc 是的,我第一次尝试回答完全是在错误的范围内。见编辑。
    • 啊哈。 Bash 5.0.17 (Ubuntu 20.04) 在这里。应该考虑检查一下 bash44,我也安装了它。
    • @usretc 我在 bash 5.1.4 中得到了和你一样的东西...
    • 时间到bashbug 也许。虽然这意味着我不能在我的脚本中真正使用它......
    猜你喜欢
    • 2013-06-13
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多