返回内置

返回内置

根据公开组,

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

相关内容