变量$?在mksh的$ PS1上不起作用

问题描述 投票:1回答:1

我想让我的提示显示最后一个命令的退出状态,所以我将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)"

但是它也不起作用。

shell prompt mksh
1个回答
1
投票

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

您可以使用单引号将扩展推迟到显示PS1

PS1='$? > '

这种“双扩展”通常不是参数的属性,而是外壳如何使用PS1的值的结果。 echo "$PS1"仍将显示文字字符串$? >,但是当shell显示提示时,它将扩展在值中找到的所有参数扩展。

© www.soinside.com 2019 - 2024. All rights reserved.