0

当我设置我的 PS1='$PWD' 时,命令行会向我显示当前目录的路径: /home/myname当我更改目录时它会改变。

但是,当我将其更改为“$PWD”(双引号)时,无论我现在身在何处,它总是向我显示 /home/myname。从我读过的内容来看,单引号可以准确地打印其中的内容,并且不会扩展 $ 之类的特殊符号。那么为什么它会这样工作呢?

4

2 回答 2

1

"$PWD" 立即解决。因此,您实际上是将 PS1 设置为固定值(设置时 PWD 的值)。当您设置为 '$PWD' 时,它不会立即解析,因此它会在使用时解析,并在您更改目录时更改。因此,双引号按预期扩展(到固定字符串),而单引号则没有。

于 2013-06-03T17:59:02.277 回答
0

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 将进一步扩展变量,以便提示获取您的当前目录。

于 2013-06-03T19:05:04.850 回答