Shell
內置返回
據Open Group稱,
$$ t $$他返回實用程序將導致外殼停止執行目前函式或點腳本。如果 shell 目前未執行函式或點腳本,則未指定結果。
但是,如果您執行以下程式碼段
func () { ( return 1 ) return 0 } func echo $?
輸出是
0
(我嘗試了 bash 和 dash,結果相同)。因此,似乎return
不會導致 shell 停止執行目前函式,這與 POSIX 標準相矛盾。我錯過了什麼嗎?
( return 1 )
這在子shell中執行。它確實會立即終止子 shell,如果您擷取了該 shell 的返回碼,它將是
1
. 函式本身0
在那之後返回。(請參閱Shell 命令語言規範中的分組命令。)
{}
與不引入子外殼的形式比較:#! /bin/sh func () { ( return 42 ) echo "One: $?" { return 1; } echo "Two: $?" return 2 } func echo "Three: $?"
輸出(注意沒有“二”):
One: 42 Three: 1