for faz um loop nos parâmetros posicionais se nenhuma in value1 value2... part for especificada em todas as shells parecidas com Bourne.
Esse já era o caso no shell Bourne do final dos anos 70, embora no shell Bourne, você precisaria omitir esse ; (você também pode usar for i do (exceto em algumas versões antigas de cinzas onde você precisa de uma nova linha antes do do )).
Veja Qual é o objetivo da palavra-chave "do" no Bash para loops? para obter mais informações, incluindo mais variantes surpreendentes .
Fazendo:
for i
do
something with "$i"
done
é uma boa prática. É ligeiramente mais portátil / confiável que o normalmente equivalente:
for i in "$@"; do
something with "$i"
done
para o qual o shell Bourne, ksh88 tem alguns problemas sob algumas condições (como quando $# é 0 em algumas versões do shell Bourne (que ${1+"$@"} em vez de "$@" pode contornar) ou quando $IFS não contém o caractere de espaço em Bourne e ksh88), ou quando a opção nounset está ativada e $# é 0 em algumas versões de alguns shells, incluindo bash ( novamente com ${1+"$@"} como uma solução alternativa ).