if 中打字错误导致 Bash 退出代码 0

问题描述 投票:0回答:1

考虑以下

bash
代码:

if [ "$a" = "foo"]
then
  echo "TRUE"
fi
echo $?

我们得到:

bash: [: missing `]'
0

所以基本上,if 中的测试由于拼写错误而失败(

"foo"
]
之间没有空格),但整个
if
的退出代码仍然是
0
又名。成功了。

这个答案解释了为什么退出代码是

0
(我们得到
if
的退出代码,它是
0
,因为什么都不是
true
)。

到目前为止一切都很好,但这种行为极其危险,因为它可能会导致无声错误。有没有办法重写条件,或更改任何

bash
设置,以便像这样的拼写错误触发脚本的非零退出/
ìf

bash if-statement exit-code
1个回答
0
投票

if
不区分
[
失败的不同原因。但是,它会根据条件是否失败或存在其他错误来设置不同的退出状态。条件失败时,退出状态为
1
,错误数将大于1。

所以你可以明确检查

$?
来区分:

[ "$a" = "foo"]
case $? in
    0) echo "TRUE" ;;
    1) echo "FALSE" ;;
    *) echo "ERROR" ;;
esac
© www.soinside.com 2019 - 2024. All rights reserved.