特定
>现代Linux / UNIX / OSX(带有realpath)
> bash 4(即使在OSX上)
是
"$PWD" == "$(realpath .)"
总是如此吗?
解决方法:
很容易测试,情况并非总是这样.
$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
所以不,$PWD并不总是和$(realpath.)相同.
bash manual表示PWD变量由内置cd命令设置.默认的behaviour of cd是:
symbolic links are followed by default or with the -L option
这意味着如果您进入符号链接,变量将相对于符号链接进行解析,而不是相对于物理路径.您可以使用-P选项更改cd命令的此行为.这将导致它报告PWD变量中的物理目录:
$cd -P /tmp/fakedir
$echo $PWD
/tmp/realdir
您可以使用-P选项更改bash的默认行为:
$set -P
$cd /tmp/fakedir
$echo $PWD
/tmp/realdir
$set +P
$cd /tmp/fakedir
$echo $PWD
/tmp/fakedir
当然,尽管您可以在执行cd后将所需的任何内容分配给PWD变量,但它会获取该值:
$cd /tmp/fakedir
$PWD=/i/love/cake
$echo $PWD
/i/love/cake
但那并不是你所要求的.