zewiblzd
zewiblzd

Reputation: 13

Bash: reiterate array inside for loops

Trying to reiterate an array inside a nested for loop:

#!/bin/bash

aaa=("nine" "ten" "eleven" "twelve")
bbb=("one" "two" "three" "four" "five" "six" "seven" "eight")
ccc=("thirteen" "fourteen")


for b in "${bbb[@]}" ; do
    for i in "${!aaa[@]}" ; do
        echo "$b" "${aaa[i]}" "${ccc[i]}"
    done
done

I get this, where the eleven and twelve lines don't receive a ccc element:

one nine thirteen
one ten fourteen
one eleven 
one twelve 
two nine thirteen
two ten fourteen
two eleven 
two twelve 
three nine thirteen
three ten fourteen
three eleven 
three twelve 
four nine thirteen
four ten fourteen
four eleven 
four twelve 
five nine thirteen
five ten fourteen
five eleven 
five twelve 
six nine thirteen
six ten fourteen
six eleven 
six twelve 
seven nine thirteen
seven ten fourteen
seven eleven 
seven twelve 
eight nine thirteen
eight ten fourteen
eight eleven 
eight twelve

Desired output:

one nine thirteen
one ten fourteen
one eleven thirteen
one twelve fourteen
two nine thirteen
two ten fourteen
two eleven thirteen
two twelve fourteen
three nine thirteen
three ten fourteen
three eleven thirteen
three twelve fourteen
four nine thirteen
four ten fourteen
four eleven thirteen
four twelve fourteen
five nine thirteen
five ten fourteen
five eleven thirteen
five twelve fourteen
six nine thirteen
six ten fourteen
six eleven thirteen
six twelve fourteen
seven nine thirteen
seven ten fourteen
seven eleven thirteen
seven twelve fourteen
eight nine thirteen
eight ten fourteen
eight eleven thirteen
eight twelve fourteen

Upvotes: 1

Views: 88

Answers (2)

skr
skr

Reputation: 2286

Try this

aaa=("nine" "ten" "eleven" "twelve")
bbb=("one" "two" "three" "four" "five" "six" "seven" "eight")
ccc=("thirteen" "fourteen")
echo ${!aaa[@]}
count=0;
for b in "${bbb[@]}" ; do
    for i in "${!aaa[@]}" ; do
        (( count = count==1 ? 0 : 1 ))
        echo "$b" "${aaa[i]}" "${ccc[count]}"
    done
done

Upvotes: 0

Nahuel Fouilleul
Nahuel Fouilleul

Reputation: 19315

from expected output you need a modulo "${ccc[i%${#ccc[@]}]}" instead of "${ccc[i]}"

Upvotes: 5

Related Questions