注意:没有以正确的方式询问此问题。原因是!
条件行中的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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句