bash - 如何在 bash 中组合关联数组?

标签 bash associative-array

有谁知道在 bash 中组合两个关联数组的优雅方法,就像组合普通数组一样?这就是我要说的:

在 bash 中,您可以按如下方式组合两个普通数组:

declare -ar array1=( 5 10 15 )
declare -ar array2=( 20 25 30 )
declare -ar array_both=( ${array1[@]} ${array2[@]} )

for item in ${array_both[@]}; do
    echo "Item: ${item}"
done

我想对两个关联数组做同样的事情,但下面的代码不起作用:

declare -Ar array1=( [5]=true [10]=true [15]=true )
declare -Ar array2=( [20]=true [25]=true [30]=true )
declare -Ar array_both=( ${array1[@]} ${array2[@]} )

for key in ${!array_both[@]}; do
    echo "array_both[${key}]=${array_both[${key}]}"
done

它给出了以下错误:

./associative_arrays.sh: line 3: array_both: true: must use subscript when assigning associative array

以下是我想出的解决方法:

declare -Ar array1=( [5]=true [10]=true [15]=true )
declare -Ar array2=( [20]=true [25]=true [30]=true )
declare -A array_both=()

for key in ${!array1[@]}; do
    array_both+=( [${key}]=${array1[${key}]} )
done

for key in ${!array2[@]}; do
    array_both+=( [${key}]=${array2[${key}]} )
done

declare -r array_both

for key in ${!array_both[@]}; do
    echo "array_both[${key}]=${array_both[${key}]}"
done

但我希望我实际上遗漏了一些允许单行赋值的语法,如非工作示例所示。

谢谢!

最佳答案

我也没有单行代码,但这里有一个不同的“解决方法”,有人可能会喜欢使用字符串转换。这是 4 行,所以我离你想要的答案只有 3 个分号!

declare -Ar array1=( [5]=true [10]=true [15]=true )
declare -Ar array2=( [20]=true [25]=true [30]=true )

# convert associative arrays to string
a1="$(declare -p array1)"
a2="$(declare -p array2)"

#combine the two strings trimming where necessary 
array_both_string="${a1:0:${#a1}-3} ${a2:21}"

# create new associative array from string
eval "declare -A array_both="${array_both_string#*=}

# show array definition
for key in ${!array_both[@]}; do
    echo "array_both[${key}]=${array_both[${key}]}"
done

关于bash - 如何在 bash 中组合关联数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29804909/

相关文章:

php - php 有 c++ 的 std::pair 吗?

D 语言 : Return freshly created associative array

linux - Linux中的大写和小写内置变量有什么区别,如HOME和eval

ruby - 如何确定 XFS 文件系统是否以编程方式卡住?

bash - USB 供应商和产品 ID 到设备绑定(bind)

linux - BASH Base64 编码脚本编码不正确

bash - centos 7中使用pid的内存限制预处理

javascript - 如何在Javascript中将数字作为字符串创建关联数组

javascript - 使用 JavaScript 查找关联数组中的键

php - MySQLI 准备语句 : num_rows & fetch_assoc