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
ループなどの複雑なコマンドのいくつかの形式には、zshで 代替形式 があります。これらの形式は主に Cシェル に触発されています。これはzshが若いときにかなり一般的でしたが、現在は姿を消しています。これらの代替フォームは、通常のフォームとまったく同じように機能し、構文が異なります。それらは少し短くなりますが、はっきりしません。
for
コマンドの標準形式は_for x in 1 2 3; do echo $x; done
_であり、while
コマンドの標準形式は_while test …; do somecommand; done
_です。 Ksh、bash、およびzshには、for
の代替形式があります。for ((i = 0; i < 42; i++)); do somecommand; done
は、PascalやCなどの言語のfor
ループを模倣して、整数を列挙します。 zshに存在する他のエキゾチックな形式はzshに固有です(ただし、cshに触発されていることがよくあります)。