以下bash脚本的含义是什么:
if [ -d "directory name" -a ! -L "directory name" ]; then
# do something
fi
我能理解到这里:
if [-d"目录名称"
但在此之后我失去了。除了解释之外,还要考虑解释-a的文档。 -L
答案 0 :(得分:3)
-L
运算符测试其参数是否为符号链接。它也可以写成-h
。
!
是逻辑否定运算符,-a
是逻辑"和"。
所以这个:
if [ -d "directory name" -a ! -L "directory name" ]; then
表示"如果无论是什么目录而且不是符号链接"。 (如果目标是指向目录的符号链接,则-d
将返回true。
[
语法实际上是test
命令的同义词。您系统上的man test
或info test
应该向您显示文档。 [
也是bash中的内置命令,因此info bash
也会向您显示文档;搜索
`test'
答案 1 :(得分:1)
-d
是"目录存在,"但你似乎知道这一点。-a
是"逻辑和。" !
是"表达式为false" -L
是"文件存在且是符号链接(与-h相同)" 所以在英语中这将是
如果"目录名称"存在并且是目录和"目录名称"存在且不是一个symobolic链接,然后......
您需要的文档是man test
。
答案 2 :(得分:0)
我相信第二部分是:
...和(-a)"目录名称"不是(!)符号链接(-L)
答案 3 :(得分:0)
-a
是POSIX标准版test
的扩展,用作布尔AND
运算符。 standard本身(请参阅“应用程序使用”部分)不鼓励使用常规shell test
运算符来支持两个单独的&&
命令。
if [ -d "directory name" ] && [ ! -L "directory name" ]; then
# do something
fi
链接页面还定义了-d
,!
和-L
运营商:
-d 路径名 如果pathname解析为目录的现有目录条目,则为True。如果无法解析路径名,或者路径名解析为不是目录的文件的现有目录条目,则返回false。
! 表达 如果表达式为false,则为True。如果表达式为真,则返回false。
-L 路径名 如果pathname解析为符号链接的现有目录条目,则为True。如果无法解析路径名,或者路径名解析为不是符号链接的文件的现有目录条目,则返回false。如果pathname的最后一个组件是符号链接,则不会遵循该符号链接。
答案 4 :(得分:-1)
[ -d FILE ]
- 如果FILE存在且为目录,则为真。 [ -a File]
- 如果存在FILE,则为真。[ -L FILE ]
- 如果FILE存在且为符号链接,则为真。[ ! EXPR ]
- 如果EXPR为假,则为真。