注意:这个问题的提问方式不对。原因是条件行中的 !
if ! ( commad)
是命令的部分,因此,它更改了 $?
。所以,当我检查 $?
command
的退出状态时,我错了。接受的答案详细解释了这一点。
根据我的编码经验,程序成功时返回/退出 0,失败时返回/退出其他值。例如,在 C 中,我们使用 exit 0
表示成功终止。但是当我写一个 bash 脚本来判断一个命令是否成功时,我发现很奇怪 0
现在意味着发生了一些错误并且命令失败了。例如,
if ! (make $1); then
exit 1
fi
问题为什么在BASH中执行命令失败时退出状态码为0?
最佳答案
这个问题中的说法是错误的; bash 不使用 0
来表示失败的退出。
$ make bad; echo $?
make: *** No rule to make target `bad'. Stop.
2
$ scp badhost:/something .; echo $?
ssh: Could not resolve hostname badhost: nodename nor servname provided, or not known
1
当然,使用 !
来反转失败和成功将使 $?
在失败后变为 0 —— 但这是明确且有意的行为。
$ ! make bad; echo $?
make: *** No rule to make target `bad'. Stop.
0
$ ! scp badhost:/something .; echo $?
ssh: Could not resolve hostname badhost: nodename nor servname provided, or not known
0
关于c - 为什么我很困惑 "the exit status code is 0 when a command fails in BASH",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26664453/