Quel est le but du do
mot-clé dans Bash for
syntaxe de boucle ? Pour moi, cela semble redondant.
for i in `seq 1 2`; do echo "hi"; done
Pourquoi la syntaxe n'est-elle pas comme celle-ci ?
for i in `seq 1 2`; echo "hi"; done
Je suis sûr que c'est le cas remplir un but. Je veux juste apprendre.
Réponse acceptée :
Notez que cette syntaxe est héritée du shell Bourne.
Après le nom de la variable, vous pouvez avoir soit in
pour avoir la liste des éléments explicitement donnée, ou do
, pour boucler sur les paramètres de position.
for i in 1 2 3
do
echo "$i"
done
Ou
set 1 2 3
for i do
echo "$i"
done
Avoir le do
dans les deux cas (même si ce n'est pas strictement nécessaire dans le premier) permet d'avoir une syntaxe plus cohérente. Il est également cohérent avec le while
/until
boucles où le do
est nécessaire.
while
cmd1
cmd2
do
cmd3
cmd4
done
Vous avez besoin du do
pour indiquer où se trouve la liste des conditions fin des commandes.
Notez que le shell Bourne ne supportait pas for i; do
. Cette syntaxe n'était pas non plus POSIX jusqu'à l'édition 2016 de la norme (for i do
a toujours été POSIX ; voir le bogue du groupe Austin associé).
zsh
a quelques formes abrégées comme :
for i in 1 2 3; echo $i
for i (1 2 3) echo $i
for ((i=1;i<=3;i++)) echo $i
Ou prise en charge de plusieurs variables :
for i j (1 a 2 b) echo $i $j
(bien que vous ne puissiez pas utiliser in
ou do
comme nom de variable à la place de j
ci-dessus).
Même s'ils sont rarement documentés, la plupart des shells de type Bourne (Bourne, ksh, bash, zsh, pas ash
ni yash
) prennent également en charge :
for i in 1 2 3; { echo "$i";}
Le shell Bourne, ksh
et zsh
(mais pas bash
) prennent également en charge :
for i { echo "$i"; }
Tandis que bash
, ksh
et zsh
(mais pas le shell Bourne) :
for i; { echo "$i"; }
Tous (Bourne, bash
, ksh
, zsh
) prise en charge :
for i
{ echo "$i";}
ksh93
, bash
, zsh
assistance :
for ((i=1;i<=3;i++)) { echo "$i"; }