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

use*_*855 0 bash

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

f123() { echo $1; return 1; }
f124() { echo $1; return 1; }
foo() {
    return f123 "hello" && f124 "world"
}
foo
Run Code Online (Sandbox Code Playgroud)

要求是:

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

我怎么在bash中这样做?

che*_*ner 6

你根本不需要return这里; 函数的退出状态是执行的最后一个命令的退出状态.return只需返回显式退出状态.

foo() {
    f123 "hello" && f124 "world"
}
Run Code Online (Sandbox Code Playgroud)

如果f123失败(具有非零退出状态),f124则不执行并且退出状态f123用作退出状态foo.如果f123成功,则f124 确实执行,和它的退出状态(零或不)被用作的退出状态foo.

(如果你真的想f124f123失败时执行,那么使用||而不是&&.)

  • 函数在shell中没有返回值.它们具有退出状态,并且可以写入标准输出,但它们不返回值. (2认同)