Bash

在函式中返回時程序退出

  • May 26, 2019

這是我的程式碼的摘錄:

ninja ()
{
 if $1 = toto
 then
 return 1
 elif $1 = tata
 then
 return 4
 fi
}

main () {
 ninja "tata"
 if [ $? -ne 1 ]
 then
   somecode
 fi
}

main "$@"

無緣無故,當我的函式返回一些東西時,程序就退出(我已經用陷阱 EXIT 測試過),函式返回 4 並執行陷阱。

編輯:當我評論時有效

set -o errexit
set -o errtrace

但是我怎麼能找到錯誤呢?

如果要測試與某個字元串等效的函式參數,則必須使用構造if [ "$x" == "string" ],那麼您的程式碼將如下所示:

test () {
 if [ "$1" == "toto" ] then
   return 1
 elif [ "$1" == "tata" ] then
   return 4
 fi
}

main () {
 test "tata"
 if [ $? -ne 1 ] then
   echo "somecode"
 fi
}

main "$@"

您可以使用test函式名稱。如果要呼叫 builtin test,請使用builtin test構造。

並註意=(分配)和==(比較)。在測試內部[,運算符]=工作方式==與測試字元串相等(而不是數字)類似。

set -o errexit命令返回非零(不成功)後立即退出。您的ninja回報1(非零)並退出。

您沒有測試的程式碼不起作用原因if語句嘗試在其中執行指令並確定命令的退出狀態:如果退出狀態為零(成功),則在thenuntil elifof之後執行指令fi

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