![设置 PS1 时引号的作用](https://linux22.com/image/896020/%E8%AE%BE%E7%BD%AE%20PS1%20%E6%97%B6%E5%BC%95%E5%8F%B7%E7%9A%84%E4%BD%9C%E7%94%A8.png)
我使用的是 Ubuntu 16.04 LTS。我对设置 PS1 和使用单引号有疑问。我一直在练习更改提示。所以,我按照书中的示例操作,然后我遇到了一个好奇的问题。
示例如下:
user1@myubuntu:~$ PS1='$PWD '
/home/user1
我了解到单引号会将特殊字符(如,,,$
等)变为普通字符。``
\
所以,我认为语句上方的提示必须是如下所示的:
user1@myubuntu:~$ PS1='$PWD '
$PWD
为什么特殊字符($
)在单引号中仍然有效?
答案1
Bash(和其他 shell)不会PS1
按原样打印。它们会对其进行解释,然后显示输出。例如,Bash 会扩展各种特殊代码,如\u
、\w
等,然后 (来自 Bash 手册,控制提示):
字符串解码后,将通过参数扩展、命令替换、算术扩展和引号删除进行扩展,具体取决于
promptvars
shell 选项的值(请参阅Bash 内置函数)。
参数扩展(即变量扩展)意味着像$PWD
in这样的字符串PS1
被扩展。如果您想$PWD
在提示符中显示纯文本,请执行以下任一操作:
PS1='\$PWD '
# or
shopt -u promptvars
PS1='$PWD '