顺便提一下,关联数组、字典或映射都属于同一种抽象数据类型(我们称之为字典)。
那么,这里是将数组作为Bash(4+版本)中的字典值存储的解决方案。
请注意,在Bash中,数组是一个由空格分隔的字符串列表(因此不包含任何元素内部的空格),因此我们可以将带引号的列表:
"firstname middlename secondname"
作为X
字典中s1
键的值:
declare -A X=(
['s1']="firstname middlename secondname"
['s2']="surname nickname"
['s3']="other"
)
现在我们可以将s1
键的值作为数组获取:
declare -a names=(${X[s1]})
变量names
现在包含一个数组:
> echo $names
firstname
> echo ${names[1]}
middlename
> echo ${#names[@]}
3
最后,你提到了一个包含空格的字符串的问题:
"first name"
,"second name"
我们可以使用一个技巧 - 把一个 空格 表示为一个特殊的符号序列(可以只是一个符号),例如双下划线:
"first__name"
,"second__name"
重新声明我们的字典,但在数组元素中用"转义"空格:
declare -A X=(
['s1']="first__name middle__name second__name"
['s2']="surname nickname"
['s3']="other"
)
在这种情况下,当我们得到
s1
键的值为数组后:
declare -a names=(${X[s1]})
我们需要对数组元素进行后处理,以删除
__
代表空格替换为实际的
空格符号。为了做到这一点,我们只需要使用Bash字符串的替换命令即可。
> echo ${names/__/ }
first name
> echo ${names[1]/__/ }
middle name
> echo ${#names[@]}
3