Je veux écrire une boucle imbriquée pour qui doit fonctionner dans l'invite du shell bash. imbriqué pour la boucle dans la commande de ligne unique.
Par exemple,
for i in a b; do echo $i; done
a
b
Dans l'exemple ci-dessus, la boucle for est exécutée dans une droite de commande sur une seule ligne. Comme cela, j'ai essayé la boucle imbriquée dans l'invite du shell. Ça ne fonctionne pas. Comment faire ça. Veuillez me mettre à jour à ce sujet.
Ce n'est pas une boucle imbriquée, juste une boucle unique. Et la version imbriquée fonctionne aussi:
# for i in a b; do for j in a b; do echo $j; done; done
a
b
a
b
Une ligne (points-virgules nécessaires):
for i in 0 1 2 3 4 5 6 7 8 9; do for j in 0 1 2 3 4 5 6 7 8 9; do echo "$i$j"; done; done
Formaté pour la lisibilité (aucun point-virgule nécessaire):
for i in 0 1 2 3 4 5 6 7 8 9
do
for j in 0 1 2 3 4 5 6 7 8 9
do
echo "$i$j"
done
done
Il existe différentes vues sur la façon dont le code Shell doit être disposé sur plusieurs lignes; c'est à peu près ce que j'utilise normalement, sauf si je mets la prochaine opération sur la même ligne que do
(en enregistrant deux lignes ici).
#!/bin/bash
# loop*figures.bash
for i in 1 2 3 4 5 # First loop.
do
for j in $(seq 1 $i)
do
echo -n "*"
done
echo
done
echo
# outputs
# *
# **
# ***
# ****
# *****
for i in 5 4 3 2 1 # First loop.
do
for j in $(seq -$i -1)
do
echo -n "*"
done
echo
done
# outputs
# *****
# ****
# ***
# **
# *
for i in 1 2 3 4 5 # First loop.
do
for k in $(seq -5 -$i)
do
echo -n ' '
done
for j in $(seq 1 $i)
do
echo -n "* "
done
echo
done
echo
# outputs
# *
# * *
# * * *
# * * * *
# * * * * *
for i in 1 2 3 4 5 # First loop.
do
for j in $(seq -5 -$i)
do
echo -n "* "
done
echo
for k in $(seq 1 $i)
do
echo -n ' '
done
done
echo
# outputs
# * * * * *
# * * * *
# * * *
# * *
# *
exit 0