Was ist der Zweck von do Schlüsselwort in Bash for Schleifensyntax? Für mich fühlt es sich überflüssig an.
for i in `seq 1 2`; echo "hi"; done
Warum ist die Syntax nicht so?
for i in `seq 1 2`; echo "hi"; done
Ich bin mir sicher, dass es das tut einen Zweck erfüllen. Ich möchte nur lernen.
Akzeptierte Antwort:
Beachten Sie, dass diese Syntax von der Bourne-Shell geerbt wird.
Nach dem Variablennamen können Sie entweder in haben um die Liste der Elemente explizit angegeben zu bekommen, oder do , um die Positionsparameter zu durchlaufen.
for i in 1 2 3
do
echo "$i"
done
Oder
set 1 2 3
for i do
echo "$i"
done
Das do haben in beiden Fällen (auch wenn es im ersten nicht unbedingt notwendig ist) sorgt für eine konsistentere Syntax. Es stimmt auch mit while überein /until Schleifen, wo der do ist erforderlich.
while
cmd1
cmd2
do
cmd3
cmd4
done
Sie brauchen das do zu sagen, wo die Liste der Zustand Befehle Ende.
Beachten Sie, dass die Bourne-Shell for i; do . Diese Syntax war bis zur Ausgabe 2016 des Standards auch nicht POSIX (for i do war schon immer POSIX; siehe den verwandten Bug der Austin-Gruppe).
zsh hat einige Kurzformen wie:
for i in 1 2 3; echo $i
for i (1 2 3) echo $i
for ((i=1;i<=3;i++)) echo $i
Oder Unterstützung für mehr als eine Variable:
for i j (1 a 2 b) echo $i $j
(obwohl Sie in nicht verwenden können oder do als Variablenname anstelle von j oben).
Auch wenn selten dokumentiert, die meisten Bourne-ähnlichen Shells (Bourne, ksh, bash, zsh, nicht ash noch yash ) unterstützen auch:
for i in 1 2 3; { echo "$i";}
Die Bourne-Shell, ksh und zsh (aber nicht bash ) unterstützen auch:
for i { echo "$i"; }
Während bash , ksh und zsh (aber nicht die Bourne-Shell) Unterstützung:
for i; { echo "$i"; }
Alle (Bourne, bash , ksh , zsh ) Unterstützung:
for i
{ echo "$i";}
ksh93 , bash , zsh Unterstützung:
for ((i=1;i<=3;i++)) { echo "$i"; }