使用 $(pwd) 还是 $PWD 更好?

使用 $(pwd) 还是 $PWD 更好?

BASEDIR=$(pwd)在一个脚本中遇到了。

除了可能被覆盖BASEDIR="$PWD"之外,与使用相比还有什么优点或缺点吗?$PWD

答案1

如果 bash 遇到它,$(pwd)它将执行命令 pwd 并替换$(pwd)为该命令的输出。$PWD是一个几乎总是被设置的变量。 pwd 长期以来都是一个内置的 shell 命令。

因此,$PWD如果未设置此变量,将会失败;$(pwd)如果您使用的 shell 不支持该$()构造,则将会失败,根据我的经验,这种情况很常见。所以我会使用$PWD.

正如每个书呆子一样,我也有自己的shell 脚本编写教程

答案2

还应该提到的是,$PWD由于其性能,这是理想的。作为 shell 变量,它几乎可以立即解析。$(pwd)有点令人困惑。如果您man 1 bulitin使用 Bash 检查系统,您会发现这pwd是一个内置命令,这可能会让您相信它与访问变量一样快。然而,该$()构造总是启动一个新的子 shell(一个新进程)来运行其内容,无论里面有什么。反引号也是如此。事实上,当我对其进行基准测试时:

echo 'Benchmarking $(pwd)...'
time (for i in {1..1000}; do echo $(pwd) > /dev/null; done)
echo 'Benchmarking $PWD...'
time (for i in {1..1000}; do echo $PWD > /dev/null; done)

我的通话时间为 1.52 秒$(pwd),.018 秒$PWD。应尽可能避免不必要的子 shell 以及任何其他无关进程的启动。它们比您在其他语言中可能习惯的函数调用要昂贵得多。

相关内容