A expressão:
$ ksh -c 'for ((i=0;i<10;i++)){ echo $i;}'
0
1
2
3
4
funciona corretamente.
Falha ao encontrar a descrição dessa sintaxe na qual o {...;}
está substituindo ; do ...; done
no manual.
Existe uma referência no manual? Para quais conchas isso funciona corretamente?
Respostas:
{ ...; }
já foi aceito no lugar dedo ...; done
emfor
loops na primeira versão do shell Bourne em Unix V7 no final dos anos 70 (veja o código fonte ) mas nunca documentado, tanto quanto eu sei.Todos
ksh
(tanto o original derivado do shell Bourne quanto o ksh93 reescrevem),pdksh
¹ (e derivados),bash
(desde o início em 1989) e ozsh
suportam. Não conheço nenhumash
derivado que o faça.yash
também nãoyash
foi gravado no padrão POSIX.Em
zsh
, o suporte foi adicionado com o 2.0 em 1991, mas como parte de um novo intervalo de formas curtas para a maioria das construções, que vai além da sintaxe de Bourne. Não é apenasfor i in 1 2; { ...; }
, éfor i in 1 2; any-command
(e suas variantes). E está documentado lá e existe desde a sua introdução .AFAIK, ao lado
zsh
, apenas o pdksh o documenta (para ambosfor
eselect
).Quanto ao
((init; condition; action))
formulário, que vemksh93
e foi copiado porzsh
ebash
.Nem isso
((...))
nem o{ ...; }
lugar dedo ...; done
POSIX.Consulte também Qual é o objetivo da palavra-chave "do" no Bash para loops? para mais
for
formas de loop.¹ não versões anteriores, nem o shell Forsyth no qual se baseia. Foi adicionado em 5.1.1 em 1994 e provavelmente explica por que foi documentado lá
fonte