两者pwd
都~+
提供相同的信息,即当前目录路径。
所以我的问题是,我应该使用其中一个而不是另一个吗?~+
正如我想象的那样,所有系统都支持吗pwd
?如果是这样的话,~+
使用起来会更加养眼。
一个使用示例是:
var=$($(pwd)/folder/another/script -v)
var=$(~+/folder/another/script -v)
答案1
~+
看起来不标准,only~username
和波形符单独定义。例如 Dash 和 Busybox 不支持~+
.不过, commandpwd
以及 shell 变量$PWD
都是标准的,所以"$(pwd)"
or"$PWD"
应该可以工作。
在大多数情况下,您只需使用 来引用当前目录.
,但如果您需要扩展完整路径,我通常会使用"$PWD"
.与变量相反,命令替换需要在许多 shell 中生成新进程,这是不必要的开销。
请注意,您需要引用扩展,以防当前目录的路径包含空格等。(或者你$IFS
包含的任何内容,加上全局字符。)
不过,如果您想解析当前工作目录中的任何符号链接,则需要使用"$(pwd -P)"
.和$PWD
都会$(pwd)
显示您过去使用的路径,以及符号链接(在我尝试过的外壳中,没有检查这是否是给定的)。例如:
$ mkdir /tmp/foo
$ ln -s /tmp/foo /tmp/link
$ cd /tmp/link
$ echo "$PWD"; pwd; pwd -P
/tmp/link
/tmp/link
/tmp/foo