bash関数の結果をキャプチャして終了できるようにする

bash関数の結果をキャプチャして終了できるようにする

この関数は呼び出しスクリプトを終了する必要があります:

crash() {
  echo error
  exit 1
}

これは期待どおりに動作します:

echo before
crash
echo after         # execution never reaches here

しかし、これは当てはまりません:

echo before
x=$(crash)         # nothing is printed, and execution continues
echo after         # this is printed

関数の結果をキャプチャし、終了できるようにするにはどうすればよいでしょうか?

答え1

これは、サブシェルで$(crash)実行されるため、スクリプトではなくサブシェルに適用されるためです。crashexit

スクリプトが終了したために使用しない場合は、出力を変数にキャプチャする意味は何でしょうか?

答え2

これで問題は解決するはずです:

echo before
x=$(crash) || exit       # if crash give -gt 0 value then exit with the same value
echo after

関連情報