У меня есть следующая ситуация, два массива, давайте назовем их (0 1) и B (1 2), я должен объединить их в новом массиве C (0:1 0:2 1:1 1:2), последний бит, который я придумал, является этим циклом:
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
Но это не работает, что хорошо, как вывод я получаю это:
0: : : :
В этом случае вывод должен быть 0:1 0:2 как = (0) и B = (1 2)
Поскольку Bash поддерживает разреженные массивы, лучше перебирать массив, чем использовать индекс, основанный на размере.
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
Выходы:
declare -a c='([0]="0:2" [1]="0:3" [2]="1:2" [3]="1:3")'
вот один из способов
a=(0 1)
b=(1 2)
for((i=0;i<${#a[@]};i++));
do
for ((j=0;j<${#b[@]};j++))
do
c+=(${a[i]}:${b[j]});
done
done
for i in ${c[@]}
do
echo $i
done