这是我的代码的摘录:
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
。