
這是我的程式碼的摘錄:
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
但我怎麼才能發現錯誤呢?
答案1
如果您想測試與某個字串等效的函數參數,則必須使用 Construction 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
construct。
並注意=
(作業)和==
(比較)。在測試內部[
,]
運算=
子的工作方式類似於==
並測試字串相等性(而不是數字)。
set -o errexit
命令返回非零(不成功)後立即退出。您的ninja
回報1
(非零)並退出。
沒有測試的程式碼無法正常工作,因為if
語句嘗試在其中執行指令並確定命令的退出狀態:如果退出狀態為零(成功),則執行then
til elif
of之後的指令fi
。