$? 是 shell 中用于保存上一条命令退出状态码的特殊变量,值为 0 表示成功,非 0 表示失败,范围 0–255,且每次执行新命令后即被覆盖。

Shell 中用 $? 获取上一个命令的执行状态码,这是最直接、最常用的方式。
什么是 $?
$? 是一个特殊 Shell 变量,它**自动保存上一条命令执行完毕后的退出状态码(exit status)**。这个值是 0 到 255 之间的整数:
- 0 表示命令成功执行;
- 非 0(如 1、2、127、128+ 等) 表示某种失败或异常(具体含义取决于命令本身)。
怎么查看和使用 $?
执行命令后,立刻在下一行输入 echo $? 即可看到结果:
$ ls /tmp<br>$ echo $?<br>0
$ ls /nonexistent<br>$ echo $?<br>2
注意:$? 的值**每次都会被新命令覆盖**,所以必须在目标命令之后、其他命令之前读取。
在脚本中判断命令是否成功
实际写脚本时,通常不直接打印 $?,而是用它做条件判断:
- 用
if检查:if ls /tmp > /dev/null; then echo "OK"; else echo "Fail"; fi(此时 Shell 内部已用到$?) - 显式检查:
ls /tmp > /dev/null; if [ $? -eq 0 ]; then echo "Success"; fi
常见误区提醒
-
$?不是“上一个变量”,也不是“上一个参数”,它专指**上一个命令的退出状态**; - 管道(
|)会影响$?:默认只反映最后一个命令的状态;如需获取中间命令状态,要用$PIPESTATUS数组; - 函数、子 shell、括号命令(
(...))都会重置$?,需在它们结束后立即捕获。











