如何使用交替键和值的序列来定义Bash5.1关联数组?

我在Bash 5.1的发行说明中读到:

GG。可以使用复合分配中的键值对列表来分配关联数组。单词不是 [key]=value 形式的复合赋值被假定为键值赋值。缺少或为空的键是错误;缺失值被视为 NULL。作业不得混合两种形式。

检查Bash 5.1 参考手册?数组部分我看到了这个新块(与Bash 4.4 参考手册相比):

赋值给关联数组时,复合赋值中的单词可以是赋值语句(需要下标),也可以是解释为交替键和值序列的单词列表: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


以上是如何使用交替键和值的序列来定义Bash5.1关联数组?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>