Shell

內置返回

  • September 30, 2012

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

引用自:https://unix.stackexchange.com/questions/49525