哪个外壳为变量PS1实现POSIX语义?

时间:2019-03-24 16:02:53

标签: sh posix

IEEE Std 1003.1, 2004 edition's sh的2.5.3节中,有关PS1环境变量的定义是:

  

每次交互式外壳程序准备读取命令时,该值   该变量的值应进行参数扩展并写入   到标准错误。默认值为“ $”。对于拥有   具体的其他实施定义的特权,默认值可能是   是实现定义的另一个值。外壳应更换每个   字符“!”的实例在PS1中的历史文件编号为   下一个要键入的命令。转义“!”和另外一个 '!' (那   是,“!” )应放置文字字符'!'在提示中。这个   IEEE Std 1003.1-2001的卷规定了变量的作用   仅适用于支持“用户可移植性实用程序”选项的系统。

因此,似乎!可以在PS1变量中使用,以替换为下一个要键入的命令的历史文件编号。如果您在dash之类的Bourne shell实现中尝试使用该方法,则会发现它没有实现。在当今的GNU bash中也未实现它。

哪个shell实现了?

1 个答案:

答案 0 :(得分:1)

如果您设置POSIXLY_CORRECT环境变量或使用--posix选项调用bash,

bash将实现此目的:

PS1='!$ ' POSIXLY_CORRECT=1 bash
2$ echo foo
foo
3$ !2
echo foo
foo
3$