当我设置我的 PS1='$PWD' 时,命令行会向我显示当前目录的路径:
/home/myname
当我更改目录时它会改变。
但是,当我将其更改为“$PWD”(双引号)时,无论我现在身在何处,它总是向我显示 /home/myname。从我读过的内容来看,单引号可以准确地打印其中的内容,并且不会扩展 $ 之类的特殊符号。那么为什么它会这样工作呢?
"$PWD" 立即解决。因此,您实际上是将 PS1 设置为固定值(设置时 PWD 的值)。当您设置为 '$PWD' 时,它不会立即解析,因此它会在使用时解析,并在您更改目录时更改。因此,双引号按预期扩展(到固定字符串),而单引号则没有。
PS1
是一个特殊的变量。从 ksh 手册页:
PS1 The value of this variable is expanded for parameter expansion,
command substitution, and arithmetic substitution to define the
primary prompt string which by default is ``$''. [...]
因此,PS1 的值在显示提示之前得到特殊处理。使用单引号时,PS1 的值只是字符串$PWD ,但当需要提示时,ksh 将进一步扩展变量,以便提示获取您的当前目录。