我注意到在zsh 中有两种构建循环的替代方法:
for x (1 2 3); do echo $x; donefor x in 1 2 3; do echo $x; done他们都打印:
1
2
3
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么是这两种语法?是否在每个对象中$x迭代不同类型的对象?
bash是否有类似的区别?
为什么以下工作?:
#!/bin/zsh
a=1
b=2
c=5
d=(a b c)
for x in $d; do print $x;done
Run Code Online (Sandbox Code Playgroud)
但这个没有?:
#!/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
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 88
多种形式的复杂命令(例如循环)在 zsh 中具有替代形式。这些形式主要受C shell 的启发,这在 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中,其中模拟物for的像C或Pascal语言环路,枚举整数。zsh 中存在的其他奇异形式是 zsh 特有的(但通常受到 csh 的启发)。