退出状态码是命令执行后返回的0–255整数,0表示成功,非0表示失败;用echo $?可立即查看上一命令的退出码,但其值易被后续命令覆盖,需紧接使用或暂存到变量中。

在 Linux 中,使用 $? 这个特殊变量可以获取上一个命令的退出状态码。
什么是退出状态码
每个命令执行结束后都会返回一个整数(0–255)作为退出状态码。惯例是:
- 0 表示成功
- 非 0(如 1、2、127、128+ 等)表示某种失败或异常
如何查看上一个命令的退出状态
执行任意命令后,立即运行 echo $? 即可看到它的退出码:
ls /tmp echo $?
如果目录存在且可读,通常输出 0;如果写错路径,比如 ls /no-such-dir,再执行 echo $? 会输出 2。
注意事项
$? 的值只保留最近一次命令的结果,后续任何命令(包括 echo、printf 甚至空格和回车后的换行)都会覆盖它:
- 不要在中间插入其他命令再查
$? - 调试时建议紧接在目标命令后立刻检查,或把结果暂存到普通变量中,例如:
ret=$?; echo "退出码是 $ret" - 管道(
|)会影响$?:默认返回的是**最后一个命令**的退出码;如需获取管道中某个命令的状态,要用$PIPESTATUS数组
常见退出码含义
部分通用退出码参考:
- 1:通用错误
- 2:误用内置命令(如参数错误)
- 126:命令不可执行(权限问题)
- 127:命令未找到
- 130:Ctrl+C 中断(SIGINT)
- 137:被 kill -9 终止(SIGKILL)


















