在bash中模拟类似异常的行为

时间:2012-09-18 07:36:11

标签: bash

在Bash中,有没有办法模拟异常?

E.g。在测试函数中,我有几个测试语句

test_foo_and_bar() {
    expect_foo $1
    expect_bar $2
}

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

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

现在,我想要的是,如果expect_foo失败,执行将停止并返回到函数test_foo_and_bar的调用者。

这样的事情可能吗?我知道你可以这样做:

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

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

修改

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

在Java中,我有效地需要某种finally条款。

1 个答案:

答案 0 :(得分:1)

我想到的一个快速入侵是使用子shell和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_foo_bar以避免终止主程序。

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