我正在更新一个旧的shell脚本以使用新配置运行,而且我对shell脚本相对较新,但我对大多数脚本一般都很好。但是,我无法弄清楚以下行正在做什么。这个特定的行是从另一个正在运行的脚本调用的,并且正在UNIX类型的机器上运行,但我不确定它是否相关。
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
我的问题基本上是,这实际上是指向相对于它所调用和存储的目录的目录?那究竟是什么&&在那里?在两个目录之间看到逻辑运算符似乎很奇怪,但我再次对shell脚本相当新。
答案 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