for循环中的字符串Zsh数组

时间:2015-07-09 09:58:58

标签: bash command-line zsh

我试图在脚本中打印一堆字符串(在zsh中)并且它似乎不起作用。如果我将数组放在变量中并使用它,代码将起作用。任何想法,为什么这不起作用?

for string in (some random strings to print) ; echo $string

3 个答案:

答案 0 :(得分:5)

zsh for命令的默认形式不使用括号(如果有任何它们不被解释为for语句的一部分):

for string in some random strings to print
do
    echo $string
done

for还有几种简短形式:

  • 对于单个命令(确切地说:单个管道或与&&||链接的多个管道,其中管道也可以只是一个命令)有两个选项:< / p>

    • 默认表单,没有dodone

      for string in some random strings to print ; echo string
      
    • 没有in但有括号,也没有dodone

      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 forloop 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