【发布时间】:2012-06-13 04:08:57
【问题描述】:
在我的一个 shell 脚本中,我看到了
if [[ ! -d directory1 || ! -L directory ]] ; then
-d 和 -L 选项在这里是什么意思?在哪里可以找到有关在 if 条件中使用的选项的信息?
【问题讨论】:
-
那些不是
if语法;它们是[[语法。[[是一个完全独立于if的命令。
在我的一个 shell 脚本中,我看到了
if [[ ! -d directory1 || ! -L directory ]] ; then
-d 和 -L 选项在这里是什么意思?在哪里可以找到有关在 if 条件中使用的选项的信息?
【问题讨论】:
if 语法;它们是[[ 语法。 [[ 是一个完全独立于 if 的命令。
您可以执行help test,这将显示[[ 命令接受的大部分选项。
您也可以使用help [ 来显示更多信息。您可以通过help [[ 获取有关该类型条件的信息。
另请参阅“CONDITIONAL EXPRESSIONS”部分中的man bash。
【讨论】:
help [ 完全等效。
-d 检查给定目录是否存在。 -L 测试符号链接。
Advanced Bash-Scripting Guide 中的File test operators 解释了各种选项。这里是man page for bash,也可以通过在终端中输入man bash 找到。
【讨论】:
bash 有关于help 命令的内置帮助。您可以使用 help 轻松找到内置 bash 的选项:
$ help [[
...
Expressions are composed of the same primaries used by the `test' builtin
...
$ help test
test: test [expr]
Evaluate conditional expression.
...
[the answer you want]
【讨论】:
在 Bourne shell 中,[ 和 test 链接到同一个可执行文件。因此,您可以在test 联机帮助页中找到许多不同的测试。
这个:
if [[ ! -d directory1 || ! -L directory ]] ; then
表示directory1 是否不是目录或如果directory 不是链接。
我认为正确的语法应该是:
if [[ ! -d $directory1 ] || [ ! -L $directory ]] ; then
或
if [[ ! -d $directory1 -o ! -L $directory ]] ; then
您的 OP 中的行是否正确?
【讨论】:
[[ 支持|| 等等; POSIX [ 没有。要在 POSIX shell 中做同样的事情,你会做if [ -d "${directory1}" ] || ! [ -h directory ]; then。 -o 语法由 POSIX 指定,但已过时(它会导致解析歧义)。