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?
Réponses:
{ ...; }
a déjà été accepté à la placedo ...; done
enfor
boucles dans la première version du shell Bourne dans Unix V7 à la fin des années 70 (voir le code source ) mais jamais documenté autant que je sache.Tous
ksh
(à la fois l'original dérivé du shell Bourne et la réécriture ksh93),pdksh
¹ (et dérivés),bash
(depuis le début en 1989) et lezsh
soutiennent. Je ne connais aucunash
dérivé qui le fasse.yash
non plus, mais ayash
été écrit au 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 seulementfor i in 1 2; { ...; }
, c'estfor i in 1 2; any-command
(et ses variantes). Et il est documenté là - bas et a été depuis son introduction .AFAIK, à côté
zsh
, seul pdksh le documente (pour les deuxfor
etselect
).Quant au
((init; condition; action))
formulaire, il provient deksh93
et a été copié parzsh
etbash
.Ni cela
((...))
ni la{ ...; }
place de nedo ...; done
sont POSIX.Voir aussi À quoi sert le mot-clé "do" dans Bash pour les boucles? pour plus de
for
formes de boucle.¹ pas les versions antérieures, ni le shell Forsyth 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é
la source