我读到Bash 5.1 的发行说明 https://tiswww.case.edu/php/chet/bash/NEWS:
gg。可以使用复合赋值中的键值对列表来分配关联数组。单词不是 [key]=value 形式的复合赋值被假定为键值赋值。钥匙丢失或为空均属错误;缺失值被视为 NULL。作业不能混合使用两种形式。
检查Bash 5.1 参考手册 → 数组部分 https://www.gnu.org/software/bash/manual/bash.html#Arrays我看到这个新块(与Bash 4.4 参考手册 https://web.archive.org/web/20170426040945/https://www.gnu.org/software/bash/manual/bash.html#Arrays):
当分配给关联数组时,复合赋值中的单词可以是需要下标的赋值语句,也可以是被解释为交替键和值的序列的单词列表:name=(key1 value1 key2 value2 … )
。这些的处理方式与name=( [key1]=value1 [key2]=value2 … )
。列表中的第一个单词决定如何解释其余单词;列表中的所有分配必须属于同一类型。使用键/值对时,键不能缺失或为空;最终缺失值被视为空字符串。
这个语法也被内建的declare接受。可以使用以下方法将各个数组元素分配给name[subscript]=value
上面介绍的语法。
于是我做了一个测试:
$ bash --version
GNU bash, version 5.1.0(1)-release (x86_64-apple-darwin18.5.0)
$ declare -a bla
$ bla=( [name]=me )
$ echo "${bla[name]}"
me # it works well
但是,如果我使用新语法,它对我不起作用,它会返回键而不是值:
$ declare -a bla
$ ble=( name me )
$ echo "${ble[name]}"
name # should be "me"
如何正确使用复合赋值作为交替键和值的序列?
这是定义关联数组的问题declare -A
(注意“A”的大写字母):
declare -A bla
$ bla=(k1 v1 k2 v2)
$ echo "${bla[k1]}"
v1
如果您尝试混合分配,则会失败,如下所示:
$ bla=([k1]=v1 k2 v2)
bash: bla: k2: must use subscript when assigning associative array
bash: bla: v2: must use subscript when assigning associative array
$ bla=([k1]=v1 [k2]=v2)
$ echo "${bla[k2]}"
v2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)