回答:
{}
{ list; }
中括弧の間にコマンドのリストを配置すると、現在のシェルコンテキストでリストが実行されます。サブシェルは作成されません。リストに続くセミコロン(または改行)が必要です。
サブシェルの作成に加えて、歴史的な理由により、これらの2つの構成要素には微妙な違いがあります。中括弧は予約語であるため、空白またはその他のシェルメタキャラクターによってリストから分離する必要があります。括弧は演算子であり、空白文字によってリストから分離されていなくても、シェルによって別個のトークンとして認識されます。
// ソース
ここで、誤解を招くような回答があった場合、@ rushが正しい答えを出していると思います。fork-bombは、「」という関数を定義します:
。中括弧内のコードは、最後の " :
" によって関数が呼び出されるまで実行されません。したがって、コマンドのグループ化としての中括弧と関数本体としての中括弧は構文的には同じですが、セマンティクスが異なります。@rushの引用
と同じドキュメントから:
歴史的な理由から、最も一般的な使用法では、関数の本体を囲む中括弧は、空白または改行によって本体から分離する必要があることに注意してください。これは、中かっこが予約語であり、空白または別のシェルメタ文字によってコマンドリストから区切られている場合にのみ、中かっことして認識されるためです。また、中括弧を使用する場合、リストはセミコロン、「&」、または改行で終了する必要があります。
function_body
はcompound_command
(プラスオプションredirect_list
)です。{
特殊文字ではなく予約語であるため、スペースが必要です。
brace_group
、関数の一部とそうでない場合の動作は異なります。後者のケースを説明するためにコマンドグループを使用していましたが、これは突進のリンクで説明されていたものです。
{
演算子ではなく予約語であり、単語を区別するために他の単語から分離する必要があります。