Bash: 追加 (+=) 到 nameref (-n) 到散列键
Bash: append (+=) to nameref (-n) to hash key
在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
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 系列中的某个时候引入了一个错误。
在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
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 系列中的某个时候引入了一个错误。