在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实现了?
答案 0 :(得分:1)
POSIXLY_CORRECT
环境变量或使用--posix
选项调用bash,bash将实现此目的:
PS1='!$ ' POSIXLY_CORRECT=1 bash
2$ echo foo
foo
3$ !2
echo foo
foo
3$