Qual è lo scopo di do parola chiave in Bash for sintassi del ciclo? Per me sembra ridondante.
for i in `seq 1 2`; do echo "hi"; done
Perché la sintassi non è così?
for i in `seq 1 2`; echo "hi"; done
Sono sicuro che lo fa riempire uno scopo. Voglio solo imparare.
Risposta accettata:
Nota che quella sintassi è ereditata dalla shell Bourne.
Dopo il nome della variabile, puoi avere sia in per avere l'elenco di elementi fornito in modo esplicito, o do , per scorrere i parametri posizionali.
for i in 1 2 3
do
echo "$i"
done
Oppure
set 1 2 3
for i do
echo "$i"
done
Avere il do in entrambi i casi (anche se nel primo non è strettamente necessario) rende più coerente la sintassi. È anche coerente con il while /until loop in cui do è necessario.
while
cmd1
cmd2
do
cmd3
cmd4
done
Hai bisogno di do per dire dove si trova l'elenco delle condizioni i comandi finiscono.
Si noti che la shell Bourne non supportava for i; do . Anche quella sintassi non era POSIX fino all'edizione 2016 dello standard (for i do è sempre stato POSIX; vedere il relativo bug del gruppo Austin).
zsh ha alcune forme abbreviate come:
for i in 1 2 3; echo $i
for i (1 2 3) echo $i
for ((i=1;i<=3;i++)) echo $i
O supporto per più di una variabile:
for i j (1 a 2 b) echo $i $j
(anche se non puoi usare in o do come nome della variabile al posto di j sopra).
Anche se raramente documentate, la maggior parte delle shell simili a Bourne (Bourne, ksh, bash, zsh, non ash né yash ) supportano anche:
for i in 1 2 3; { echo "$i";}
La shell Bourne, ksh e zsh (ma non bash ) supportano anche:
for i { echo "$i"; }
Mentre bash , ksh e zsh (ma non la shell Bourne) supporto:
for i; { echo "$i"; }
Tutti (Bourne, bash , ksh , zsh ) supporto:
for i
{ echo "$i";}
ksh93 , bash , zsh supporto:
for ((i=1;i<=3;i++)) { echo "$i"; }