2017-09-20 1 views
1

Essayant de répéter un tableau dans une boucle imbriquée pour:Bash: array réitèrent l'intérieur des boucles

#!/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 

Je reçois cela, où les onze et douze lignes ne reçoivent pas un élément ccc:

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 

sortie souhaitée:

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 
+0

voulez-vous '$ {ccc [i% $ {# ccc [@]}]}' ou d'un produit cartésien –

+0

@NahuelFouilleul sortie désirée est clairement pas un cartésienne produit. –

+0

@NahuelFouilleul. C'était mon erreur. J'ai oublié le "non" dans ma hâte. –

Répondre

5

de sortie prévu, vous avez besoin d'un modulo "${ccc[i%${#ccc[@]}]}" au lieu de "${ccc[i]}"

0

Essayez cette

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