Ich habe festgestellt, dass es in zsh zwei alternative Möglichkeiten zum Erstellen von Schleifen gibt :
for x (1 2 3); do echo $x; done
for x in 1 2 3; do echo $x; done
Beide drucken:
1
2
3
Meine Frage ist, warum die beiden Syntaxen? Ist $x
Iterieren durch eine andere Art von Objekt in jedem von ihnen?
Macht bash einen ähnlichen Unterschied?
Nachtrag:
Warum funktioniert folgendes ?:
#!/bin/zsh
a=1
b=2
c=5
d=(a b c)
for x in $d; do print $x;done
aber dieser nicht ?:
#!/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
for i ({0..4..2}) for j ({a..c}) echo "($i,$j)"
= {0,2,4}x{a,b,c}
. Semikolons gelten für die äußerste Schleife und Umleitungen gelten für die innerste Schleife. Wenn Sie dies ändern müssen, benötigen Sie nur geschweifte Klammern: for i ({0..4..2}) { for j ({a..c}) echo "($i,$j)" } | cat -n
= {1,...,9}*({0,2,4}x{a,b,c})
. Natürlich können Sie Schleifen mit zsh-Erweiterung kombinieren:for i ("("{0..4..2}","{a..c}")") echo $i
for x ($d); do print $x; done
wird funktionieren, und es wird mit der ersten Syntax übereinstimmen, die Sie am Anfang Ihrer Frage aufgezählt haben.