0

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

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

应该与

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

但它给了我一个错误:

zsh: parse error near做'`

任何想法?

4

1 回答 1

2

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

   {}
     { 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/ 命令列表必须以分号结尾;

于 2012-10-04T09:23:07.680 回答