我试图在脚本中打印一堆字符串(在zsh
中)并且它似乎不起作用。如果我将数组放在变量中并使用它,代码将起作用。任何想法,为什么这不起作用?
for string in (some random strings to print) ; echo $string
答案 0 :(得分:5)
zsh 中for
命令的默认形式不使用括号(如果有任何它们不被解释为for
语句的一部分):
for string in some random strings to print
do
echo $string
done
for
还有几种简短形式:
对于单个命令(确切地说:单个管道或与&&
或||
链接的多个管道,其中管道也可以只是一个命令)有两个选项:< / p>
默认表单,没有do
或done
:
for string in some random strings to print ; echo string
没有in
但有括号,也没有do
或done
for string (some random strings to print) ; echo $string
获取命令列表(如默认格式),foreach
代替for
,无in
,带括号并以end
终止:
foreach string (some random strings to print) echo $string ; end
在您的情况下,您混合了单个命令的两个简短形式。由于存在in
zsh ,因此不将括号作为for
命令的语法元素。相反,他们被解释为glob限定符。除了你没有打算进行任何文件名扩展之外,这个失败有两个原因:
在glob限定符之前没有模式(有或没有实际的globs)。因此,任何匹配的文件名都必须与空字符串完全匹配,这是不可能的
但主要是“要打印的一些随机字符串”不是有效的glob限定符。您可能会收到类似“zsh:unknown file attribute:i”的错误(至少使用 zsh 5.0.5 ,它可能取决于 zsh 版本)。
答案 1 :(得分:4)
检查zsh
for
loop documentation:
for x (1 2 3); do echo $x; done
for x in 1 2 3; do echo $x; done
答案 2 :(得分:2)
您可能正在尝试这样做:
for string in some random strings to print ;do
echo $string
done