Bash中if语句条件为假时的退出状态疑问
Bash中if语句退出状态的疑问解答
你这里的核心误解来自对help if最后一句话的忽略——完整的规则是:
if命令的退出状态是最后执行命令的状态,如果没有任何条件测试为真,则退出状态为0
在你给出的代码里:
if false; then echo we never get here fi echo $?
- 条件命令
false执行后返回非0,所以then块里的echo根本没运行 - 同时你没有写
else块,属于“没有任何条件测试为真”的情况 - 按照规则,此时整个
if命令的退出状态就是0,所以后续的echo $?会输出0
如果想验证条件命令本身的退出状态,你需要在if结构结束前捕获,比如:
false echo $? # 这里会输出1,因为上一条命令是false
或者在if里直接捕获:
if false; then echo we never get here else echo $? # 这里输出1,是false命令的退出状态 fi echo $? # 这里输出0,是else块中echo命令的退出状态
再举个条件成立时的例子,你就能更清楚规则:
if true; then echo hello false fi echo $? # 这里输出1,因为then块最后执行的命令是false
内容的提问来源于stack exchange,提问作者Mark VY
相关产品推荐
相关产品推荐

