变量 $?不适用于 mksh 上的 $PS1

The variable $? does not work on $PS1 on mksh

我希望我的提示显示最后一个命令的退出状态,所以我将 PS1 设置为:

PS1="$? > "

但它总是打印 0 >
例如,即使我 运行 false,提示也不会打印 1 > 或任何退出状态。

为什么会出现这种情况?

编辑:

我尝试用一​​个函数来设置我的提示,测试退出状态是否大于0,所以它不会一直打印0 >,只有当退出状态不为零时才会打印。

 promptcmd() {
    _EXIT=$?
    test $_EXIT -gt 0  && printf "\e[1;31m [$_EXIT]"
    printf "\e[0m ❯ "
    unset _EXIT
 }

 PS1="$(promptcmd)"

但是还是不行。

$? 在您 定义 PS1 时展开,因为您使用了双引号。

您可以使用单引号延迟扩展,直到显示 PS1

PS1='$? > '

这种"double expansion"不是一般的属性参数,而是shell使用PS1的值的结果。 echo "$PS1" 仍将显示文字字符串 $? >,但当 shell 显示提示时,它会扩展在值中找到的任何参数扩展。