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

时间:2018-09-22 06:36:18

标签: bash

此问题是对之前提出的问题(例如, 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的返回代码返回给调用者?

1 个答案:

答案 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