この関数は呼び出しスクリプトを終了する必要があります。
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)
実行されるため、スクリプトではなくサブシェルに適用されるためcrash
です。exit
とにかくスクリプトが終了するので、変数が使用されていない場合に変数に出力をキャプチャするのはなぜですか?
答え2
これにより問題が解決します。
echo before
x=$(crash) || exit # if crash give -gt 0 value then exit with the same value
echo after