【发布时间】:2014-12-27 04:05:18
【问题描述】:
注意:这个问题的问法不正确。原因是条件行if ! ( commad) 中的! 是命令的一部分,因此它会更改$?。所以,当我检查$? 的退出状态command 时,我错了。接受的答案详细解释了这一点。
根据我的编码经验,程序在成功时返回/退出 0,在失败时返回/退出其他值。例如,在 C 语言中,我们使用exit 0 来表示成功终止。但是当我写了一个bash脚本来判断一个命令是否成功时,我觉得很奇怪0现在意味着发生了一些错误并且命令失败了。例如,
if ! (make $1); then
exit 1
fi
问题为什么在 BASH 中命令失败时退出状态码为 0?
【问题讨论】:
-
您是在谈论
! (make $1)测试,还是在谈论其他内容? (至于您对scp的评论,我已经以几种不同的方式运行它失败了,它的退出状态是1)。 -
简短回答:不是。另一方面,如果您使用
!反转它... -
scp nosuchbox.example.com:nosuchfile.txt . ; echo $?为我打印 1。 -
请记住,因为
0表示成功,if语句将在退出状态为 0 时分支到 true 侧,并在非零退出状态时转到 else 分支。也许这就是令人困惑的地方? -
@PengZhang,
!不是if的一部分;它是正在运行的(复合)命令的一部分,所以是的,它会更改该命令的退出状态。