web-dev-qa-db-fra.com

bash Shell imbriqué pour la boucle

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.

23
rashok

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
33
Daniel

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).

31
Jonathan Leffler
#!/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
4
user2867654