0

私は内のコマンドについて読み{ }ました、新しいので開始せずに現在のシェルで起こります次のコマンド:

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

私はあなたが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; )彼らは、サブシェルを呼び出す括弧(中括弧ではない)とは異なると説明しています。さらにドキュメントの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 に答える