回答:
括弧を使用すると、コマンドがサブシェルに配置されますが、常に必要なわけではありません。または、中括弧を使用します。
command && echo "Ok, continuing" || { echo "Check internet connection"; exit 1; }
ここでの秘訣は、括弧とは異なり、中括弧で囲まれた最後のコマンドの後にが続く必要があること;
です。
中括弧は、コマンドの有効な引数です。たとえば、次の引数として中かっこがありますecho
。
$ echo }
}
その結果、シェルが次のように見える場合:
{ command1; command2 }
シェルはcommand1を引数なしと解釈し、command2は文字からなる1つの引数を持つと解釈し}
ます。中括弧}
は、セミコロンまたは改行に続く場合のみ、グループを閉じると解釈されます。上記を機能させるには:
{ command1; command2; }
{...}
と(...)
以下はx
10に設定されていますが、echo
コマンドが実行される前にその設定が忘れられていることに注意してください。
$ x=0; false || ( echo Hello; x=10 )
Hello
$ echo $x
0
対照的に、中括弧では、の設定x=10
が記憶されます。
$ x=0; false || { echo Hello; x=10; }
Hello
$ echo $x
10
違いは、サブシェルでの変数の割り当ては、サブシェルが完了した後は存続しないためです。
からman bash
:
(リスト)
listはサブシェル環境で実行されます(以下のコマンド実行環境を参照)。シェルの環境に影響を与える変数の割り当てと組み込みコマンドは、コマンドの完了後も有効になりません。返却ステータスはリストの終了ステータスです。
{リスト; }
listは、現在のシェル環境で単純に実行されます。 リストは改行またはセミコロンで終了する必要があります。 これはグループコマンドと呼ばれます。返却ステータスはリストの終了ステータスです。メタ文字(および)とは異なり、{および}は予約語であり、予約語の認識が許可されている場所に出現する必要があることに注意してください。これらは単語の区切りを引き起こさないため、空白または別のシェルメタ文字によってリストから分離する必要があります。
【エンファシス追加】
()
と{}
。