Bash 从源代码脚本中的第二个函数返回

Bash 从源代码脚本中的第二个函数返回,bash,Bash,此问题是以前提出过的问题的变体,例如 然而,我想要的是源函数X调用第二个函数Y,然后将函数Y的返回代码返回给调用者 目前,我的脚本正在使用以下模式工作: 函数_x(){ 函数_y | |返回$? } 函数_y(){ 返回1 } 然而,在实践中,这会导致在我的代码中出现大量返回语句 假设函数Y实际上是一个使用函数。然后我得到了丑陋的代码,这不是很枯燥,就像这样: \u用法(){ echo“用法:$0[-h]选项” 返回0 } 函数_a(){ [“$1”==“-h”]&&&&&u用法&&retur

此问题是以前提出过的问题的变体,例如

然而,我想要的是源函数X调用第二个函数Y,然后将函数Y的返回代码返回给调用者

目前,我的脚本正在使用以下模式工作:

函数_x(){
函数_y | |返回$?
}
函数_y(){
返回1
}
然而,在实践中,这会导致在我的代码中出现大量返回语句

假设函数Y实际上是一个使用函数。然后我得到了丑陋的代码,这不是很枯燥,就像这样:

\u用法(){
echo“用法:$0[-h]选项”
返回0
}
函数_a(){
[“$1”==“-h”]&&&&&u用法&&return 1
某些其他条件和用法返回1
然而,另一个条件和用法返回1
...
}
(我的实际代码是。)


一般来说,函数X调用第二个函数Y,然后将Y的返回代码返回给调用者,有没有一种干净的方法?

您不需要做任何事情: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

您不需要做任何事情: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

我想我试图解决的主要问题是避免所有对return语句的重复调用。也许这是不可能的?@AlexHarvey:我在回答的末尾添加了一个解决方案。顺便说一下,使用
-h
运行以获取帮助的程序应该返回0,而不是1。哦,我明白了,是的,我可以这样做。关于
-h
的注释。谢谢。你可能想强调一下,这里的语法要求分号。我想我要解决的主要问题是避免对return语句的重复调用。也许这是不可能的?@AlexHarvey:我在回答的末尾添加了一个解决方案。顺便说一下,使用
-h
运行以获取帮助的程序应该返回0,而不是1。哦,我明白了,是的,我可以这样做。关于
-h
的注释。谢谢。你可能想强调一下,这里的语法要求分号。容易错过。