Ern*_*A C 3 shell posix shell-builtin
根据开放集团的说法,
[t]返回实用程序将导致 shell 停止执行当前函数或点脚本。如果 shell 当前没有执行函数或点脚本,则结果未指定。
但是,如果您运行以下代码段
func () {
( return 1 )
return 0
}
func
echo $?
Run Code Online (Sandbox Code Playgroud)
输出是0(我尝试了 bash 和 dash,结果相同)。因此,这似乎return不会导致 shell 停止执行当前函数,这与 POSIX 标准相矛盾。我错过了什么吗?
( return 1 )
Run Code Online (Sandbox Code Playgroud)
这在子shell中运行。它会立即终止子shell,如果您发现该shell的返回码,它将是1. 函数本身0在那之后就返回了。
(请参阅Shell 命令语言规范中的分组命令。)
与{}不引入子shell的形式进行比较:
#! /bin/sh
func () {
( return 42 )
echo "One: $?"
{ return 1; }
echo "Two: $?"
return 2
}
func
echo "Three: $?"
Run Code Online (Sandbox Code Playgroud)
输出(注意没有“两个”):
One: 42
Three: 1
Run Code Online (Sandbox Code Playgroud)