在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
条款。
答案 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
函数,该函数也会输出一些详细错误。