考虑以下
bash
代码:
if [ "$a" = "foo"]
then
echo "TRUE"
fi
echo $?
我们得到:
bash: [: missing `]'
0
所以基本上,if 中的测试由于拼写错误而失败(
"foo"
和 ]
之间没有空格),但整个 if
的退出代码仍然是 0
又名。成功了。
这个答案解释了为什么退出代码是
0
(我们得到if
的退出代码,它是0
,因为什么都不是true
)。
到目前为止一切都很好,但这种行为极其危险,因为它可能会导致无声错误。有没有办法重写条件,或更改任何
bash
设置,以便像这样的拼写错误触发脚本的非零退出/ìf
?
if
不区分 [
失败的不同原因。但是,它会根据条件是否失败或存在其他错误来设置不同的退出状态。条件失败时,退出状态为1
,错误数将大于1。
所以你可以明确检查
$?
来区分:
[ "$a" = "foo"]
case $? in
0) echo "TRUE" ;;
1) echo "FALSE" ;;
*) echo "ERROR" ;;
esac