1

Bash で、例外をシミュレートする方法はありますか?

たとえば、テスト関数では、いくつかのテストステートメントがあります

test_foo_and_bar() {
    expect_foo $1
    expect_bar $2
}

expect_foo() {
    [[ $1 != "foo" ]] && return 1
}

expect_bar() {
    [[ $1 != "bar" ]] && return 1
}

さて、私が望むのは、expect_foo失敗した場合、実行が停止して function の呼び出し元に戻ることtest_foo_and_barです。

そのようなことは可能ですか?私はあなたがこのようなことができることを知っています:

test_foo_and_bar() {
    expect_foo $1 || return 2
    expect_bar $2 || return 2
}

しかし、私は代替ソリューションに興味があります (もしあれば)。

編集

提案されたソリューションは非常に優れていますが、もう 1 つ要件があります。例外が発生した後も、クリーンアップを実行する必要があります。したがって、単に終了することはオプションではありません。

私が効果的に必要としているのは、Java で言えば、ある種のfinally句です。

4

1 に答える 1

1

私の頭に浮かぶ簡単なハックは、サブシェルとを使用することですexit:

test_foo_and_bar() {
    (
        expect_foo $1
        expect_bar $2
    )
}

expect_foo() {
    [[ $1 != "foo" ]] && exit 1
}   

expect_bar() {
    [[ $1 != "bar" ]] && exit 1
}   

このように、障害が発生するとtest_foo_and_barブロック全体が終了します。ただし、メイン プログラムが終了しないように、必ずサブシェルでexpect_fooandを呼び出す必要があります。_bar

さらに、詳細なエラーも出力exitするカスタム関数に置き換えたいと思うでしょう。die

于 2012-09-18T08:12:46.127 に答える