Sintacticamente, os dois fragmentos de código a seguir estão corretos e equivalentes:
for f in bash/*.sh; do
sashacommand "$f"
done
for f in bash/*.sh
do sashacommand "$f"
done
O último poderia possivelmente ser considerado mais difícil de ler, pois do
ofusca ligeiramente o comando no corpo do loop. Se o loop contiver vários comandos e o próximo comando estiver em uma nova linha, a ofuscação será destacada ainda mais:
for f in *
do cmd1
cmd2
done
... mas sinalizar isso como um "erro" é IMHO a opinião pessoal de alguém em vez de uma verdade objetiva.
Em geral, quase qualquer ;
pode ser substituído por uma nova linha. Ambos ;
e newline são terminadores de comando. do
é uma palavra-chave que significa "aqui segue o que precisa ser feito (neste for
loop)".
for f in *; do ...; done
é o mesmo que
for f in *
do
...
done
e como
for f in *; do
...
done
O motivo para usar um sobre o outro é a legibilidade e as convenções de estilo local / pessoal.
Opinião pessoal:
Em cabeçalhos de loop muito longos , acho que pode fazer sentido colocar do
em uma nova linha, como em
for i in animals people houses thoughts basketballs bees
do
...
done
ou
for i in \
animals \
people \
houses \
thoughts \
basketballs \
bees
do
...
done
O mesmo vale para a declaração then
in if
.
Mas, novamente, isso se resume às preferências de estilo pessoal ou a qualquer estilo de codificação que o time / projeto esteja usando.