6.9 提示符控制(Controlling the Pormpt)

Bash 在每次打印首要提示符之前,会检查数组变量 PROMPT_COMMANDS 的值。如果 PROMPT_COMMANDS 中的任意元素设置了非空值,Bash 会按序号执行每一个值,就像在命令行键入一样。

除此之外,还有在下列表中描述的特殊字符是可以出现在变量 PS0、PS1、PS2 和 PS4 中:

特殊字符含义
\a响铃字符。
\d“Weekday Month Date”格式的日期(例如,“Tue May 26”)。
\D{format}format”所代表的格式传入**strftime(3)**并且将返回的结果插入到提示符字符串中;一个空的“format”会使用指定的本地时间表示。大括号是必须的。
\e一个转义字符。
\h在第一个“.”之前的主机名。
\H主机名。
\j当前由 shell 管理的作业数量。
\lshell 终端设备名中的基础名称。
\n一个新行。
\r一个回车。
\sshell 的名称,变量$0 的基础名称(在最终斜线后面的部分)。
\t24 小时时间格式“HH:MM:SS”。
\T12 小时时间格式“HH:MM:SS”。
@12 小时时间格式“am/pm”。
\A24 小时时间格式“HH:MM”。
\u当前用户的用户名。
\vBash 版本号(例如,2.00)。
\VBash 版本号加补丁级别(例如,2.00.0)。
\w当前工作目录,代表$HOME 时使用波浪号缩略。
\W$PWD的基础名称,代表$HOME 时使用波浪号缩略。
\!该命令的历史编号。
\#该命令的命令编号。
$如果有效 uid 是 0,则代表#号,否则代表$符号。
\nnn八进制值“nnn”代表的 ASCII 码的字符。
\\一个反斜线。
\[非打印字符的序列起始。其常用于在提示符中内嵌一个终端控制序列。
\]非打印字符的序列结束。

命令编号和历史编号通常是不同的:一个命令的历史编号是其在历史列表中的位置。历史列表可能包含了从历史文件(参见 9.1《Bash 历史工具》)中恢复的命令。而命令编号是在当前 shell 会话中执行了的命令序列中的位置。

在字符串解码之后,其遵从 shell 选项“promptvars”(参见 4.3.2《内建命令 shopt》)的值,可通过参数扩展、命令替换、算术扩展和引用移除进行扩展。如果字符串的转义部分出现在命令替换内部或包含单词扩展的特殊字符,其会产生副作用。