A segunda forma é sempre finita, a primeira pode trivialmente ser feita em um loop infinito:
for ((;;)); do echo $SHELL; done
Existem dois estilos de sintaxe for-loop:
for (( expr1 ; expr2 ; expr3 )) ; do commands ; done
for name [ [in [words ...] ] ; ] do commands; done
De relance, os tipos de loop que dois podem expressar parecem não estar relacionados entre si. o primeiro pode expressar o loop com base em expressões aritméticas, enquanto o segundo pode expressar o loop com base na enumeração de membros em um conjunto words
.
Essencialmente, eles realmente diferem em que tipos de looping eles podem expressar, ou são equivalentes entre si? Se o primeiro, quando usar qual?
A segunda forma é sempre finita, a primeira pode trivialmente ser feita em um loop infinito:
for ((;;)); do echo $SHELL; done
O primeiro
for (( expr1 ; expr2 ; expr3 )) ; do commands ; done
é discutivelmente mais geral que o segundo
for name [ [in [words ...] ] ; ] do commands; done
porque
Isto:
for (( expr1 ; expr2 ; expr3 )) ; do commands ; done
Faz um loop sobre inteiros, pois é forçado a fazê-lo pelo fato de que dentro da parte (( ))
each (dividida por ;
) é uma "expressão aritmética".
É semelhante a um c
para loop, tem início, fim e "ação de etapa" definidos em uma linha, é mais compacto.
O segundo funciona na lista de palavras, que podem ser números, strings ou matrizes:
for a in 1 2 3 4 5; do echo "$a"; done
for a in one two three four five; do echo "$a"; done
for a in "${one[@]}" ; do echo "$a"; done
Uma ressalva disso é que a lista de palavras está sujeita à divisão de shell, o que não é um problema na primeira construção.
Tags bash