You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中退出状态变量值变化及$?指向问题咨询

Shell脚本退出状态问题解答

问题1:为何第4行打印的$?值为0而非1?该值是否为第3行shell赋值操作的退出状态?

  • 是的,第4行的$?就是第3行赋值操作stat=$?的退出状态。
  • Shell里的$?会被每一条执行的命令实时覆盖:第2行./set_status.sh 1执行完后,$?确实是1,但第3行的变量赋值是Shell内置操作,只要赋值过程没有语法错误(这里显然没问题),它的退出状态就是0。执行完第3行后,$?就被更新为0了,所以第4行打印的是这个赋值操作的退出状态。

问题2:第9行中的$?变量对应的是哪个命令的退出状态?

  • 第9行的$?对应的是第8行echo $stat命令的退出状态。
  • 具体执行逻辑:
    1. 第8行的echo $stat属于正常执行的命令(没有语法错误),不管打印的内容是什么,它的退出状态都是0,执行完后父Shell的$?会被设置为0。
    2. 第9行的echo echo $?``是命令替换写法,反引号里的命令会在子Shell中运行。子Shell启动时会继承父Shell当前的$?值,也就是第8行echo $stat的退出状态0,所以子Shell里的echo $?会输出0,最后外层的echo把这个结果打印出来,就是你看到的最后一行输出。

内容的提问来源于stack exchange,提问作者Gary Aitken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:09:24