如何将一系列关联数组的键设置为一个值
How to set a range of associative array's keys to a value
我想知道如何将关联数组中的一系列键设置为特定值。
declare -A array
array=(
['key1']="value1"
['key2']="value2"
['key3']="value3"
)
我可以使用以下方法回显一系列数组:
echo ${array[@]:0:2}
它输出:
value2 value3
但是我怎样才能一次更改多个值以保持我的代码干燥?使用类似或不同的方法?例如一个理论例子:
${array[@]:0:2}="newvalue"
将key2和key3改为
['key2']="newvalue"
['key3']="newvalue"
${array[@]:0:2}
并不意味着任何对关联数组特别有用的东西 - 它按照 bash 决定的某种顺序获取值列表是合适的(先进先出?先进后出? 哈希顺序?按索引按字母顺序排列?按值按字母顺序排列?还有别的吗?)并打印其中的 2 个,但关联数组的全部要点在于,即使您碰巧知道 bash 将它们存储在中的顺序,这些值仅与命名索引相关,而不是它们在内部存储的顺序或其他任何内容,因此打印或更新关联数组的 N 个值中的 2 个而不是它们的索引名称没有意义。
$ cat tst.sh
#!/bin/env bash
declare -A array
array=(
['key1']='value1'
['key2']='value2'
['key3']='value3'
)
for key in key1 key2; do
array["$key"]='newvalue'
done
declare -p array
$ ./tst.sh
declare -A array=([key3]="value3" [key2]="newvalue" [key1]="newvalue" )
我想知道如何将关联数组中的一系列键设置为特定值。
declare -A array
array=(
['key1']="value1"
['key2']="value2"
['key3']="value3"
)
我可以使用以下方法回显一系列数组:
echo ${array[@]:0:2}
它输出:
value2 value3
但是我怎样才能一次更改多个值以保持我的代码干燥?使用类似或不同的方法?例如一个理论例子:
${array[@]:0:2}="newvalue"
将key2和key3改为
['key2']="newvalue"
['key3']="newvalue"
${array[@]:0:2}
并不意味着任何对关联数组特别有用的东西 - 它按照 bash 决定的某种顺序获取值列表是合适的(先进先出?先进后出? 哈希顺序?按索引按字母顺序排列?按值按字母顺序排列?还有别的吗?)并打印其中的 2 个,但关联数组的全部要点在于,即使您碰巧知道 bash 将它们存储在中的顺序,这些值仅与命名索引相关,而不是它们在内部存储的顺序或其他任何内容,因此打印或更新关联数组的 N 个值中的 2 个而不是它们的索引名称没有意义。
$ cat tst.sh
#!/bin/env bash
declare -A array
array=(
['key1']='value1'
['key2']='value2'
['key3']='value3'
)
for key in key1 key2; do
array["$key"]='newvalue'
done
declare -p array
$ ./tst.sh
declare -A array=([key3]="value3" [key2]="newvalue" [key1]="newvalue" )