c=('a' 'c')
n=(3 4 )
for i in $(seq 0 $((${#c[*]}-1)))
do
echo ${c[i]} ${n[i]}
done
C'est parfois plus pratique.
Pour expliquer le ugly
partie, comme indiqué dans les commentaires :
seq 0 2 produit la séquence de chiffres 0 1 2. $(cmd) est une substitution de commande, donc pour cet exemple la sortie de seq 0 2
qui est la séquence de nombres. Mais quelle est la limite supérieure, la $((${#c[*]}-1))
?
$((quelque chose)) est une expansion arithmétique, donc $((3+4)) vaut 7, etc. Notre expression est ${#c[*]}-1
donc quelque chose - 1. Assez simple, si nous savons ce que ${#c[*]}
est.
c est un tableau, c[*] est juste le tableau entier, ${#c[*]} est la taille du tableau qui est 2 dans notre cas. Maintenant, nous faisons marche arrière : for i in $(seq 0 $((${#c[*]}-1)))
est for i in $(seq 0 $((2-1)))
est for i in $(seq 0 1)
est for i in 0 1
. Parce que le dernier élément du tableau a un index qui est la longueur du tableau - 1.
7 votes
Je viens d'un milieu python et cette question est très utile !
5 votes
En regardant ceci quatre ans plus tard, je me demande s'il n'y a toujours pas de meilleure façon de faire. omg.
0 votes
Presque 8 ans plus tard, je me suis également demandé s'il n'y avait toujours pas de meilleure façon de procéder. Mais cette réponse de 2018 me semble plutôt bonne : stackoverflow.com/a/52228219/463994