如何通过对相似索引求和来组合 bash 中的两个数组?

如何通过对相似索引求和来组合 bash 中的两个数组?

假设我在 bash 中有两个数组(或一个或多个数组!),如下所示

a=(1 0 1)
b=(0,1,1)

我如何将它们组合成:

c=(1 1 2)

每个元素加在一起得到 c 吗?

答案1

首先,数组定义不在bash数组,元素之间,它们只是简单地定义为

a=(1 0 1)
b=(0 1 1)

要生成具有相同索引中的元素之和的新数组,请迭代任一数组索引(假设两种情况下的数组长度相同)

for idx in "${!a[@]}"; do 
    c[idx]=$(( a[idx] + b[idx] ))
done

除了使用 迭代索引之外${!a[@]},还可以使用传统的 C 风格 for 循环迭代到数组长度

for (( idx=0; idx < ${#a[@]}; idx++ )); do 

最后,要在新数组中打印结果,您可以执行类似的操作

printf '%s\n' "${c[@]}"

答案2

尝试这个,

a=(1,0,1)
b=(0,1,1)
a1=(`echo $a | tr ',' ' '`)
b1=(`echo $b | tr ',' ' '`)
for i in `seq 0 1 ${#a1[@]}`
do
        c1[$i]=`expr ${a1[$i]} + ${b1[$i]}`
done
c=(`echo ${c1[@]} | tr ' ' ','`)

相关内容