f10bit f10bit - 4 months ago 21
Bash Question

Bash combine two arrays

I have the following situation, two arrays, let's call them A( 0 1 ) and B ( 1 2 ), i need to combine them in a new array C ( 0:1 0:2 1:1 1:2 ), the latest bit i've come up with is this loop:

for ((z = 0; z <= ${#A[@]}; z++))
do
for ((y = 0; y <= ${#B[@]}; y++))
do
C[$y + $z]="${A[$z]}:"
C[$y + $z + 1]="${B[$y]}"
done
done


But it doesn't work that well, as the output i get this:

0: : : :


In this case the output should be 0:1 0:2 as A = ( 0 ) and B = ( 1 2 )

Answer

Since Bash supports sparse arrays, it's better to iterate over the array than to use an index based on the size.

a=(0 1); b=(2 3)
i=0
for z in ${a[@]}
do
    for y in ${b[@]}
    do
        c[i++]="$z:$y"
    done
done
declare -p c   # dump the array

Outputs:

declare -a c='([0]="0:2" [1]="0:3" [2]="1:2" [3]="1:3")'
Comments