首页 > 解决方案 > Bash:将 (+=) 附加到 nameref (-n) 到哈希键

问题描述

在 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(或附加)的语法是否错误?

标签: bashassociative-arrayindirection

解决方案


我无法使用bash4.4.20 进行复制:

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

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


推荐阅读