shell脚本中的逻辑和目录之间

时间:2013-05-30 18:41:53

标签: shell unix directory directory-structure

我正在更新一个旧的shell脚本以使用新配置运行,而且我对shell脚本相对较新,但我对大多数脚本一般都很好。但是,我无法弄清楚以下行正在做什么。这个特定的行是从另一个正在运行的脚本调用的,并且正在UNIX类型的机器上运行,但我不确定它是否相关。

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

我的问题基本上是,这实际上是指向相对于它所调用和存储的目录的目录?那究竟是什么&&在那里?在两个目录之间看到逻辑运算符似乎很奇怪,但我再次对shell脚本相当新。

2 个答案:

答案 0 :(得分:3)

它只保存脚本所在的目录:

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

commandA && commandB条件的评估如下:

当且仅当commandB返回退出状态为零时,才会执行

commandA。如果cd something存在,它将返回true。如果没有,它将返回退出状态为false,因此something将不会被执行。

图形上,它可以解释为:

pwd

答案 1 :(得分:2)

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|     |  |  |   |          |___ First value   |   |______ prints current working directory
|     |  |  |   |               of array      |___Logical AND operator
|     |  |  |   |__ Command to strip non-directory suffix
|     |  |  |
|     |  |  |__ Doing command substitution again to evaluate whats inside $()
|     |  |
|     |  |___ Changing directory
|     |
|     |_____ $() is construct for command substitution
|
|____ Creating and assigning a variable called DIR