如何在bash脚本中链接函数返回码

时间:2018-01-16 19:48:09

标签: bash

以下代码给出错误“foo:return:too many arguments”

f123() { echo $1; return 1; }
f124() { echo $1; return 1; }
foo() {
    return f123 "hello" && f124 "world"
}
foo

要求是:

  • 我希望foo仅在f123返回非零返回值
  • 时才执行f124
  • 我希望foo返回使用非零返回码成功执行的最后一个命令的返回值

我如何在bash中执行此操作?

2 个答案:

答案 0 :(得分:7)

你根本不需要return;函数的退出状态是执行的最后一个命令的退出状态。 return只需返回明确的退出状态。

foo() {
    f123 "hello" && f124 "world"
}

如果f123失败(退出状态为非零),则f124不会执行,f123的退出状态将用作foo的退出状态。如果f123成功,则f124 执行,其退出状态(零或不为零)将用作foo的退出状态。

(如果您确实希望在f124失败时执行f123,请使用||代替&&。)

答案 1 :(得分:-1)

Bash在成功时返回0,但您强制在函数中返回1。现在,双&符号运算符&&表示:如果上一个命令成功,则执行,即返回0.如果您坚持返回值大于0,则必须手动执行

f123() { echo $1; return 1; }
f124() { echo $1; return 1; }
foo() {
    f123 "hello"
    r1=$?
    if [ "$r1" -gt 0 ] ; then
        f124 "world"
        r2=$?
        if [ "$r2" -gt 0 ]; then
            r1=$r2
        fi
    fi
    return $r1
}