当函数返回时程序退出

当函数返回时程序退出

这是我的代码的摘录:

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

相关内容