此问题是对之前提出的问题(例如, How to return an error from a sourced bash script。
但是,我想要的是让源函数X调用第二个函数Y,然后将函数Y的返回代码返回给调用者。
此刻,我已经使用以下模式运行脚本:
function_x() {
function_y || return $?
}
function_y() {
return 1
}
但是,实际上,这会导致我的代码中出现很多return语句。
假设函数Y实际上是一个使用函数。然后,我得到了丑陋的代码,它不是很干,就像这样:
_usage() {
echo "Usage: $0 [-h] OPTIONS"
return 0
}
function_a() {
[ "$1" == "-h" ] && _usage && return 1
some_other_condition && _usage && return 1
yet_another_condition && _usage && return 1
...
}
(我的实际代码是here。)
通常,函数X是否有一种干净的方法来调用第二个函数Y,然后将Y的返回代码返回给调用者?
答案 0 :(得分:2)
您无需执行任何操作:Bash函数或脚本的返回状态就是它最后执行的命令的返回状态。
所以这个:
function_x() {
# ...
function_y || return $?
}
与此相同:
function_x() {
# ...
function_y
}
return
语句不会影响状态,因此,如果要返回命令的状态,只需在其后说return
:
if [ ... ]; do
function_y
return
fi
最后一个例子:
[ "$1" == "-h" ] && _usage && return 1
some_other_condition && _usage && return 1
yet_another_condition && _usage && return 1
您可以通过以下方式避免重复:
{ [ "$1" == "-h" ] || some_other_condition || yet_another_condition; } && _usage && return 1