$ PWD总是等于$(realpath.)

Pyt*_*Nut 3 linux bash shell

特定

  • 现代Linux/UNIX/OSX(w/realpath)
  • bash 4+(即使在OSX上)

"$PWD" == "$(realpath .)"
Run Code Online (Sandbox Code Playgroud)

总是如此吗?

Pet*_*esh 6

很容易测试,情况并非总是这样.

$ mkdir /tmp/realdir
$ cd /tmp/realdir
$ echo $PWD
/tmp/realdir
$ ln -s realdir /tmp/fakedir
$ cd /tmp/fakedir
$ echo $PWD
/tmp/fakedir
$ realpath .
/tmp/realdir
Run Code Online (Sandbox Code Playgroud)

所以不,$PWD并不总是一样的$(realpath .).

所述的bash手册表明PWD变量由内置的设置cd命令.cd的默认行为是:

默认情况下使用符号链接或使用-L选项

这意味着如果您进入符号链接,变量将相对于符号链接进行解析,而不是相对于物理路径.您可以cd使用该-P选项更改命令的此行为.这将导致它报告PWD变量中的物理目录:

$ cd -P /tmp/fakedir
$ echo $PWD
/tmp/realdir
Run Code Online (Sandbox Code Playgroud)

您可以使用以下-P选项更改bash的默认行为:

$ set -P
$ cd /tmp/fakedir
$ echo $PWD
/tmp/realdir
$ set +P
$ cd /tmp/fakedir
$ echo $PWD
/tmp/fakedir
Run Code Online (Sandbox Code Playgroud)

当然,尽管您可以PWD在执行a之后将所需的任何内容分配给变量cd,但它会获取该值:

$ cd /tmp/fakedir
$ PWD=/i/love/cake
$ echo $PWD
/i/love/cake
Run Code Online (Sandbox Code Playgroud)

但那并不是你所要求的.