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"; }