使用{}的Bash cmdlist不起作用

时间:2012-10-04 09:06:23

标签: bash

我读到了{ }中的命令,发生在当前shell中而没有启动新的所以以下命令:

for i in {1..50000} ; do echo $i ; done

应与

相同

for i in {1..50000} ; { do echo $i } ; done

但它给了我一个错误:

zsh: parse error near do'`

任何想法?

1 个答案:

答案 0 :(得分:2)

我认为你混淆了(并写了一个错字)两个概念。 文档http://www.gnu.org/software/bash/manual/bashref.html 在第3.2.4.3节中说:

   {}
     { list; }
    Placing a list of commands between curly braces causes
    the list to be executed in the current shell context.
    No subshell is created. 
    The semicolon (or newline) following list is required.

他们解释说它与(list; )不同,带括号(不是括号)会调用子shell。 进一步在文档中,在3.5.1中,它们解释了大括号扩展(括号内容被扩展为值列表)。

实际上:

for i in {1..50000} 

是大括号扩展:大括号之间的内容被整数列表替换。

在for命令之后你想做什么,应该写:

for i in {1..5000}
do
{ echo $ii ; echo "something else or run a command"; echo "maybe another"; }
done

注意:

1 / {必须跟一个空格。

2 / do命令不应该在大括号中

3 /命令列表必须以分号结尾;