質問: *man 1 bash* を読んでいて、腑に落ちない点があったので質問させていただきます。 *SHELL GRAMMAR > Compound Commands* に記載されている **(list)** と **{ list; }** は、次のように書き換えられます。 ``` (echo hoge > echo huga) { echo hoge > echo huga; } ``` Listの定義はマニュアルによると *「1つ以上のパイプラインを;,&,&&,||で区切り、最後に;,&,改行を付けたもの」* とあります。 > > Lists > > A list is a sequence of one or more pipelines separated by one of the operators ;, &, &&, or ||, and optionally terminated by one of ;, &, or newline. > > > とすると、先の例は改行でパイプラインを区切っているため、マニュアルの仕様に則ると (list; list) { list; list; } となり文法エラーとなるはずです。 ですが、実際にはきちんと動作しているので文法的には正しいことになります。 これはマニュアルと実際の動作、どちらが正しいのでしょうか? * 確認環境 CentOS 7.4 GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu) Mac OSX 10.11.6 GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)
回答: Listの定義のうち、質問で引用されている部分の後に、以下の記述があります。 > > A sequence of one or more newlines may appear in a list instead of a semicolon to delimit commands. > > >