
この関数は呼び出しスクリプトを終了する必要があります:
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