设置 PS1 时引号的作用

设置 PS1 时引号的作用

我使用的是 Ubuntu 16.04 LTS。我对设置 PS1 和使用单引号有疑问。我一直在练习更改提示。所以,我按照书中的示例操作,然后我遇到了一个好奇的问题。

示例如下:

user1@myubuntu:~$ PS1='$PWD '
/home/user1 

我了解到单引号会将特殊字符(如,,,$等)变为普通字符。``\

所以,我认为语句上方的提示必须是如下所示的:

user1@myubuntu:~$ PS1='$PWD '
$PWD

为什么特殊字符($)在单引号中仍然有效?

答案1

Bash(和其他 shell)不会PS1按原样打印。它们会对其进行解释,然后显示输出。例如,Bash 会扩展各种特殊代码,如\u\w等,然后 (来自 Bash 手册,控制提示):

字符串解码后,将通过参数扩展、命令替换、算术扩展和引号删除进行扩展,具体取决于promptvarsshell 选项的值(请参阅Bash 内置函数)。

参数扩展(即变量扩展)意味着像$PWDin这样的字符串PS1被扩展。如果您想$PWD在提示符中显示纯文本,请执行以下任一操作:

PS1='\$PWD '
# or
shopt -u promptvars
PS1='$PWD '

相关内容