我正在为课堂编写一些有关错误报告的代码,但遇到一个奇怪的问题,我的老师无法弄清楚。看起来像这样。
function errorCheck(){
if ! firstError $*
then
return $?
elif ! secondError $*
then
return $?
fi
其中firstError和secondError是检查某些错误情况的其他函数。然后,该返回值将输入另一个函数,该函数仅打印出错误文本。这些工作正常,我已将它们从我写的其他工作中删除,并且可以工作。但是,当我运行
bash -x myFunction bad parameters
它表明firstError成功返回了错误代码1,就像应该的那样,但是随后突然返回了0。像这样:
+ errorCheck bad parameters
+ firstError bad parameters
+ return 1
+ return 0
+ main bad parameters
但是,当我这样硬编码时:
function errorCheck(){
if ! firstError $*
then
return 1
elif ! secondError $*
then
return 2
fi
然后bash报告如下所示:
+ errorCheck bad parameters
+ firstError bad parameters
+ return 1
+ return 1
+ errorReport 1
+ echo 'Error 1'
+ exit 1
这就是我想发生的事情。为什么返回值突然变为0?请保持简单,因为我是bash的新手。
答案 0 :(得分:2)
!
运算符反转命令的退出状态。如果firstError
命令返回非零状态,则! firstError
的退出状态为0
,反之亦然。 $?
包含此反向退出状态。
如果要保存原始退出状态,请将if
与运行命令分开放置,并将其放入变量中。
firstError $*
status=$?
if [ $status -ne 0 ]
then
return $status
fi
secondError $*
status=$?
if [ $status -ne 0 ]
return $status
fi
另一种可能性是使用||
运算符:
firstError $* || return
secondError $* || return
如果没有为return
提供参数,则默认为$?
。