以下のコードを書くときは、ステートメントの後に複数のコマンドを実行できますelse
。
if [ "$?" -eq 0 ]
then
echo "OK"
else
echo "NOK"
exit 1
fi
ただし、他の構文を使用する場合は、次のことはできません。または:
[ "$?" -eq 0 ] && echo "OK" || (echo "NOK" >&2 ; exit 1)
私のユースケースには、に基づく複雑なスクリプトがあるので、"$?" == 0
メッセージが間違っている場合(メッセージをエコーすることに加えて)、中断する方法を探しています。
ベストアンサー1
このペアは(
)
サブシェルを生成し、内部シャットダウンコマンドを使用してスクリプト全体をシャットダウンする目標を破棄します。
自動区切り記号の代わりにコマンドに似ているので、次のよう(
)
に置き換えます。末尾のスペースと内部の最後のコマンドは、いくつかの終端文字で終わらなければなりません。これにより、同じシェルチェーンでコマンドが実行されるため、シャットダウンされ、このシェルに影響します。{
}
{
}
{
;
[ "$?" -eq 0 ] && echo "OK" || { echo "NOK" >&2; exit 1;}
アップデート:@D.BenKnobleはecho
失敗し、前のif ...; then ... else ... fi
設定のように動作しないことを述べました。したがって、最初のecho
終了コードはnoopコマンドを使用して「エスケープ」する必要があります:
(組み込みコマンドは失敗しません)。
[ "$?" -eq 0 ] && { echo "OK"; :;} || { echo "NOK" >&2; exit 1;}
引用:
グループ化コマンド
グループ化コマンドの形式は次のとおりです。
(compound-list) Execute compound-list in a subshell environment; see Shell Execution Environment. Variable assignments and built-in commands that affect the environment shall not remain in effect after the list finishes.
[...]
{ compound-list;} Execute compound-list in the current process environment. The semicolon shown here is an example of a control operator delimiting the } reserved word. Other delimiters are possible, as shown in Shell Grammar; a <newline> is frequently used.