外部関数からエラーなしでexit
ing せずに戻りたい場合は、次のトリックを使用できます。
do-something-complex() {
# Using `return` here would only return from `fail`, not from `do-something-complex`.
# Using `exit` would close the entire shell.
# So we (ab)use a different feature. :)
fail() { : "${__fail_fast:?$1}"; }
nested-func() {
try-this || fail "This didn't work"
try-that || fail "That didn't work"
}
nested-func
}
試してみる:
$ do-something-complex
try-this: command not found
bash: __fail_fast: This didn't work
これには、オプションでこの機能をオフにできるという利点と欠点があります__fail_fast=x do-something-complex
。
これにより、最も外側の関数が1を返すことに注意してください。
set -e
スクリプトの先頭return 1
に0以外の数値を設定した場合、スクリプト全体が終了することに注意してください。