Jaký je účel until
klíčové slovo v Bash for
syntaxe smyčky? Připadá mi to zbytečné.
for i in `seq 1 2`; do echo "hi"; done
Proč není syntaxe taková?
for i in `seq 1 2`; echo "hi"; done
Jsem si jistý, že to dělá naplnit účel. Chci se jen učit.
Přijatá odpověď:
Všimněte si, že tato syntaxe je zděděna z Bourne shellu.
Za názvem proměnné můžete mít buď in
Chcete-li mít seznam prvků výslovně uveden, nebo until
, pro zacyklení přes poziční parametry.
for i in 1 2 3
do
echo "$i"
done
Nebo
set 1 2 3
for i do
echo "$i"
done
Pomocí until
v obou případech (i když to v prvním není nezbytně nutné) umožňuje konzistentnější syntaxi. Je také v souladu s while
/until
smyčky, kde until
je nutné.
while
cmd1
cmd2
do
cmd3
cmd4
done
Potřebujete until
zjistit, kde je seznam stavu příkazy end.
Všimněte si, že Bourne shell nepodporoval for i; do
. Tato syntaxe také nebyla POSIX až do vydání standardu z roku 2016 (for i do
byl vždy POSIX; viz související chyba skupiny Austin).
zsh
má několik zkrácených tvarů jako:
for i in 1 2 3; echo $i
for i (1 2 3) echo $i
for ((i=1;i<=3;i++)) echo $i
Nebo podpora více než jedné proměnné:
for i j (1 a 2 b) echo $i $j
(ačkoli nemůžete použít in
nebo until
jako název proměnné namísto j
výše).
I když je to zřídka zdokumentováno, většina mušlí podobných Bourneovi (Bourne, ksh, bash, zsh, nikoli ash
ani yash
) také podporuje:
for i in 1 2 3; { echo "$i";}
Bourne shell, ksh
a zsh
(ale ne bash
) také podporuje:
for i { echo "$i"; }
Zatímco bash
, ksh
a zsh
(ale ne Bourne shell) podpora:
for i; { echo "$i"; }
Vše (Bourne, bash
, ksh
, zsh
) podpora:
for i
{ echo "$i";}
ksh93
, bash
, zsh
podpora:
for ((i=1;i<=3;i++)) { echo "$i"; }