當函數返回時程序退出

當函數返回時程序退出

這是我的程式碼的摘錄:

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 testconstruct。

並注意=(作業)和==(比較)。在測試內部[]運算=子的工作方式類似於==並測試字串相等性(而不是數字)。

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

沒有測試的程式碼無法正常工作,因為if語句嘗試在其中執行指令並確定命令的退出狀態:如果退出狀態為零(成功),則執行thentil elifof之後的指令fi

相關內容