DIR =" $(cd" $(dirname" $ {BASH_SOURCE [0]}")"&& pwd)"这是如何运作的?

时间:2016-09-06 03:20:58

标签: linux bash shell unix scripting

我需要获取脚本的路径。我可以使用pwd做到这一点,如果我已经在同一个目录中,我在网上搜索,我发现了这个

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

但我不知道如何使用它。

1 个答案:

答案 0 :(得分:35)

Bash维护了许多变量,包括BASH_SOURCE,这是一个源文件路径名数组。

${}充当变量的引用。

$()充当命令的引用,但它们会在自己的上下文中运行。

dirname为您提供所提供参数的路径部分。

cd更改当前目录。

pwd给出了当前路径。

&&是一个逻辑and,但在此实例中用于一个接一个地运行命令的副作用。

总之,该命令获取脚本的源文件路径名,将其剥离到路径部分,cd到该路径,然后使用pwd返回(有效)脚本的完整路径。这已分配给DIR。在所有这些之后,上下文被解开,所以你最终回到了你开始的目录,但是环境变量DIR包含了脚本的路径。