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
}

但我对替代解决方案感兴趣(如果有的话)。

编辑

虽然建议的解决方案非常好,但我还有一个要求。发生异常后,我仍然需要执行清理。因此,仅退出不是一种选择。

用 Java 语言来说,我实际上需要的是某种finally子句。

4

1 回答 1

1

我想到的一个快速破解方法是使用 subshel​​ling 和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块终止。但是,您必须始终记住在子shell 中调用expect_fooand_bar以避免终止主程序。

此外,您可能希望将 替换exit为自定义die函数,该函数也会输出一些详细错误。

于 2012-09-18T08:12:46.127 回答