linux – $PWD总是等于${${: – .}:A}

特定

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

[[ "$PWD" == "${${:-.}:A}" ]]

总是如此吗?

解决方法

不,这并非总是如此:

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

但是如果zsh在没有符号链接段的当前工作目录中启动,那么当前工作目录将永远不会在cd(或等效的)和..或之后具有符号链接段.因为在更改目录时它们已被解析,所以在当前工作目录中是不可能的,因此如果目录仍然存在,$PWD和${${: – .}:A}应该是等效的(见下文).

在上面的例子中,在cd.之后,zsh将$PWD更新为/ home / vinc17 / bar / subdir.但是,一张CD.在所有情况下都不会使两种形式都相同:

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

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...