Bash
在函式中返回時程序退出
這是我的程式碼的摘錄:
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
函式名稱。如果要呼叫 builtintest
,請使用builtin test
構造。並註意
=
(分配)和==
(比較)。在測試內部[
,運算符]
的=
工作方式==
與測試字元串相等(而不是數字)類似。
set -o errexit
命令返回非零(不成功)後立即退出。您的ninja
回報1
(非零)並退出。您沒有測試的程式碼不起作用原因
if
語句嘗試在其中執行指令並確定命令的退出狀態:如果退出狀態為零(成功),則在then
untilelif
of之後執行指令fi
。