如何使子函数的 return 导致父函数的 return?
How to make a return from a child function cause a return to the parent function?
我有父函数和子函数:
parent() {
child aa1 bb1 cc1
child aa2 bb2 cc2
child aa3 bb3 cc3
child aa4 bb4 cc4
}
child() {
....
if [ some error reason ]; then return 1; fi
...
}
如何使(子项的)return 1
在父项中引起 return,然后避免执行剩余的子项调用?
没有像这样在每次子调用后添加对 returned 值的检查
parent() {
child aa1 bb1 cc1
e=$?; [ "$e" != "0" ] && return $e
child aa2 bb2 cc2
e=$?; [ "$e" != "0" ] && return $e
child aa3 bb3 cc3
e=$?; [ "$e" != "0" ] && return $e
child aa4 bb4 cc4
e=$?; [ "$e" != "0" ] && return $e
}
在每次调用的末尾添加 || return
。由 return
编辑的值 return 是未指定时执行的最后一个命令的 return 状态。 (感谢小次郎提醒)
或者如果 ash
支持,则只使用 set -e
(尽管 some non-obvious limitations 关于它何时无法正常工作,这使得一些人建议您避免使用它)。 运行 set -e
在你的命令之前和任何 "simple command" 失败都会导致 shell 立即退出,但以前的解决方案更灵活。
在您的 parent
函数中添加 set -e
:
parent() {
set -e
child aa1 bb1 cc1
child aa2 bb2 cc2
child aa3 bb3 cc3
child aa4 bb4 cc4
}
然后将其命名为:
( parent )
这将运行 parent
函数在子shell和子shell中一旦有非- 任何 chile
函数调用的零退出 状态。
除了set -e
和|| return
还有一个解决方案
很简单,只需使用 exit
而不是 return
并且父项应该在子 shell:
中调用
parent() {
child aa1 bb1 cc1
child aa2 bb2 cc2
child aa3 bb3 cc3
child aa4 bb4 cc4
}
child() {
....
if [ some error reason ]; then exit 1; fi
...
}
我这样称呼父级:
( parent )
我有父函数和子函数:
parent() {
child aa1 bb1 cc1
child aa2 bb2 cc2
child aa3 bb3 cc3
child aa4 bb4 cc4
}
child() {
....
if [ some error reason ]; then return 1; fi
...
}
如何使(子项的)return 1
在父项中引起 return,然后避免执行剩余的子项调用?
没有像这样在每次子调用后添加对 returned 值的检查
parent() {
child aa1 bb1 cc1
e=$?; [ "$e" != "0" ] && return $e
child aa2 bb2 cc2
e=$?; [ "$e" != "0" ] && return $e
child aa3 bb3 cc3
e=$?; [ "$e" != "0" ] && return $e
child aa4 bb4 cc4
e=$?; [ "$e" != "0" ] && return $e
}
在每次调用的末尾添加 || return
。由 return
编辑的值 return 是未指定时执行的最后一个命令的 return 状态。 (感谢小次郎提醒)
或者如果 ash
支持,则只使用 set -e
(尽管 some non-obvious limitations 关于它何时无法正常工作,这使得一些人建议您避免使用它)。 运行 set -e
在你的命令之前和任何 "simple command" 失败都会导致 shell 立即退出,但以前的解决方案更灵活。
在您的 parent
函数中添加 set -e
:
parent() {
set -e
child aa1 bb1 cc1
child aa2 bb2 cc2
child aa3 bb3 cc3
child aa4 bb4 cc4
}
然后将其命名为:
( parent )
这将运行 parent
函数在子shell和子shell中一旦有非- 任何 chile
函数调用的零退出 状态。
除了set -e
和|| return
很简单,只需使用 exit
而不是 return
并且父项应该在子 shell:
parent() {
child aa1 bb1 cc1
child aa2 bb2 cc2
child aa3 bb3 cc3
child aa4 bb4 cc4
}
child() {
....
if [ some error reason ]; then exit 1; fi
...
}
我这样称呼父级:
( parent )