zshでループを作成する2つの代替方法があることに気付きました。
for x (1 2 3); do echo $x; done
for x in 1 2 3; do echo $x; done
それらは両方とも印刷します:
1
2
3
私の質問は、なぜ2つの構文ですか?さ$x
の異なる繰り返し処理対象物の種類、それらのそれぞれに?
んbashは同様の区別を作りますか?
補遺:
なぜ次のように機能しますか?:
#!/bin/zsh
a=1
b=2
c=5
d=(a b c)
for x in $d; do print $x;done
しかし、これはそうではありませんか?:
#!/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
それはSO狂気 -これらの二つの文があること-実際に両方「同じ仕事」しません。私は文字通りそれを回避できません!シェルデザイナーが喫煙していたものを喫煙する必要があります」
—
アレックスグレー
注意してください、この物語には最初に現れる以上のものがあります。私の答えを確認してください。
—
ジェイソンレオンハルト
私は他の誰もそれを言及するのを見ませんでしたが、両方の形式はdo / done:
—
ジョン・P
for i ({0..4..2}) for j ({a..c}) echo "($i,$j)"
=の省略を許可し{0,2,4}x{a,b,c}
ます。セミコロンは、最も外側のループに適用され、リダイレクトが最も内側に適用され、あなたがそれを変更する必要がある場合は、あなただけのかっこ必要があります:for i ({0..4..2}) { for j ({a..c}) echo "($i,$j)" } | cat -n
=を{1,...,9}*({0,2,4}x{a,b,c})
。もちろん、zshの拡大にループを組み合わせることができますfor i ("("{0..4..2}","{a..c}")") echo $i
for x ($d); do print $x; done
動作し、質問の最初に列挙した最初の構文と一致します。