$ PWD总是等于$ {$ {: - .}:A}

Pyt*_*Nut 5 linux shell zsh

特定

  • 现代Linux/UNIX/OSX
  • zsh 5+
  • setopt chase_links
  • PWD 没有设置异常

[[ "$PWD" == "${${:-.}:A}" ]]
Run Code Online (Sandbox Code Playgroud)

总是如此吗?

vin*_*c17 1

不,这并不总是正确的:

xvii:~> ls -l foo
lrwxrwxrwx 1 vinc17 vinc17 10 2014-07-05 01:12:06 foo -> bar/subdir/
xvii:~> bash
vinc17@xvii:~$ cd foo
vinc17@xvii:~/foo$ pwd
/home/vinc17/foo
vinc17@xvii:~/foo$ zsh -f
xvii% echo $PWD
/home/vinc17/foo
xvii% setopt chase_links
xvii% echo $PWD
/home/vinc17/foo
xvii% echo "${${:-.}:A}"
/home/vinc17/bar/subdir
xvii% pwd
/home/vinc17/bar/subdir
Run Code Online (Sandbox Code Playgroud)

但是,如果 zsh 在没有符号链接段的当前工作目录中启动,则当前工作目录在 a cd(或等效项)之后将永远不会有符号链接段,并且...在当前工作目录中也是不可能的,因为它们在以下情况下解析:更改目录,因此如果目录仍然存在,$PWD则 和应该是等效的(见下文)。${${:-.}:A}

在上面的示例中,在 a 之后cd .,zsh 更新$PWD/home/vinc17/bar/subdir。但是, acd .并不能使两种形式在所有情况下都等效:

xvii% mkdir my_dir
xvii% cd my_dir
xvii% rmdir ../my_dir
xvii% echo $PWD
/home/vinc17/my_dir
xvii% echo "${${:-.}:A}"
/home/vinc17/my_dir
xvii% pwd
/home/vinc17/my_dir
xvii% cd .
xvii% echo $PWD
/home/vinc17/my_dir
xvii% echo "${${:-.}:A}"

xvii% pwd
.
xvii% echo "$(realpath .)"
.: No such file or directory
Run Code Online (Sandbox Code Playgroud)