L'expression:
$ ksh -c 'for ((i=0;i<10;i++)){ echo $i;}'
0
1
2
3
4
fonctionne correctement.
Je ne trouve pas la description de cette syntaxe dans laquelle le {...;}
remplace le ; do ...; done
dans le manuel.
Y a-t-il une référence dans le manuel? Pour quels obus cela fonctionne-t-il correctement?
{ ...; }
a déjà été accepté à la place de do ...; done
dans for
boucles dans la première version du Bourne Shell dans Unix V7 à la fin des années 70 (voir le code source ) mais jamais documenté à ma connaissance.
Tout ksh
(à la fois l'original dérivé du Bourne Shell et la réécriture ksh93), pdksh
¹ (et dérivés), bash
(depuis le début en 1989) et zsh
le supporte. Je ne connais aucun dérivé ash
qui le fasse. yash
non plus mais yash
a été écrit dans le standard POSIX.
Dans zsh
, le support a été ajouté avec 2.0 en 1991, mais dans le cadre d'une nouvelle gamme de formes courtes pour la plupart des constructions qui va au-delà de la syntaxe Bourne. Ce n'est pas seulement for i in 1 2; { ...; }
, c'est for i in 1 2; any-command
(et leurs variantes). Et il est documenté là et a été depuis son introduction .
AFAIK, à côté de zsh
, seul pdksh le documente (pour for
et select
).
En ce qui concerne la ((init; condition; action))
forme, qui vient de ksh93
et a été copié par zsh
et bash
.
Ni que ((...))
ni le { ...; }
au lieu de do ...; done
sont POSIX.
Voir aussi A quoi sert le mot-clé "do" dans Bash pour les boucles? pour plus de formes de boucles for
.
¹ pas les versions antérieures, ni le Forsyth Shell sur lequel il est basé. Il a été ajouté en 5.1.1 en 1994 et cela explique probablement pourquoi il y a été documenté