以下代码给出错误“foo:return:too many arguments”
f123() { echo $1; return 1; }
f124() { echo $1; return 1; }
foo() {
return f123 "hello" && f124 "world"
}
foo
要求是:
我如何在bash中执行此操作?
答案 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
}