案例如下。我有一个目录调用:- %/home/myname/
我在该目录中做了一个软链接:- %cd /home/myname/ %ln -s /home/others/ 。
现在,我从 /home/myname/ cd 进入 other/ 这是有趣的部分。
当我执行 unix 内置pwd命令时,我得到原始路径名:- %/home/others/
但是当我回显 $PWD 环境变量时,我得到链接路径名称:- %/home/myname/others/
为什么会这样?
/var# ls -l lrwxrwxrwx 1 root root 10 Aug 22 13:21 邮件 -> 假脱机/邮件 drwxr-xr-x 2 root root 4096 七月 1 20:58 选择 drwxr-xr-x 22 root root 4096 12月5日 17:38 运行 drwxr-xr-x 12 root root 4096 八月 22 13:21 假脱机 drwxrwxrwt 14 根 根 4096 十二月 6 02:46 tmp /var# cd 邮件 /var/mail# 回显 $PWD /var/邮件 /var/mail# 密码 /var/邮件 /var/mail# /bin/pwd /var/spool/邮件
换句话说,使用$PWD就足够了,因为pwd无论如何可能不会给你更好的结果(对于更好的任何定义)。
这是为什么呢?/bin/pwd使用特定于操作系统的调用来确定当前工作目录 - 对于 Linux,内核仅保留已解析的目录(请参阅 参考资料/proc/self/cwd),而 shell 的 pwds 包含 shell 认为它所在的目录。