J'ai remarqué qu'il existe deux façons alternatives de créer des boucles dans zsh:
for x (1 2 3); do echo $x; done
for x in 1 2 3; do echo $x; done
Ils impriment tous les deux:
1
2
3
Ma question est, pourquoi les deux syntaxes? Est $x
itération à travers un autre type d'objet dans chacun d'eux?
bash fait-il une distinction similaire?
Pourquoi fonctionne ce qui suit?:
#!/bin/zsh
a=1
b=2
c=5
d=(a b c)
for x in $d; do print $x;done
mais celui-ci ne fonctionne pas?:
#!/bin/zsh
a=1
b=2
c=5
d=(a b c)
# It complains with "parse error near `$d'"
for x $d; do print $x;done
Plusieurs formes de commandes complexes telles que les boucles ont formes alternatives dans zsh. Ces formes sont principalement inspirées du C Shell , qui était assez courant quand zsh était jeune mais a maintenant disparu. Ces formes alternatives agissent exactement comme les formes normales, elles sont juste une syntaxe différente. Ils sont légèrement plus courts, mais moins clairs.
Le formulaire standard pour la commande for
est for x in 1 2 3; do echo $x; done
Et le formulaire standard pour la commande while
est while test …; do somecommand; done
. Ksh, bash et zsh ont une autre forme de for
: for ((i = 0; i < 42; i++)); do somecommand; done
, qui imite les boucles for
de langages comme Pascal ou C, pour énumérer les entiers. D'autres formes exotiques qui existent dans zsh sont spécifiques à zsh (mais souvent inspirées de csh).