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命令的退出状态。 - 具体执行逻辑:
- 第8行的
echo $stat属于正常执行的命令(没有语法错误),不管打印的内容是什么,它的退出状态都是0,执行完后父Shell的$?会被设置为0。 - 第9行的
echoecho $?``是命令替换写法,反引号里的命令会在子Shell中运行。子Shell启动时会继承父Shell当前的$?值,也就是第8行echo $stat的退出状态0,所以子Shell里的echo $?会输出0,最后外层的echo把这个结果打印出来,就是你看到的最后一行输出。
- 第8行的
内容的提问来源于stack exchange,提问作者Gary Aitken
相关产品推荐
相关产品推荐

