根据公开组,
return 实用程序应导致 shell 停止执行当前函数或点脚本。如果 shell 当前未执行函数或点脚本,则结果未指定。
但是,如果您运行以下代码片段
func () {
( return 1 )
return 0
}
func
echo $?
输出是0
(我尝试了 bash 和 dash,结果相同)。因此,这似乎return
不会导致 shell 停止执行当前函数,这与 POSIX 标准相矛盾。我错过了什么吗?
答案1
( return 1 )
它在子 shell 中运行。它会立即终止子 shell,如果您捕获该 shell 的返回码,它将是1
.0
之后函数本身返回该行。
(看分组命令在 Shell 命令语言规范中。)
与{}
不引入子shell的形式进行比较:
#! /bin/sh
func () {
( return 42 )
echo "One: $?"
{ return 1; }
echo "Two: $?"
return 2
}
func
echo "Three: $?"
输出(注意没有“二”):
One: 42
Three: 1