请看一下下面的代码,
snap=snapshot.file
touch snapshot.file-1
$ [ -a $snap-1 ] && echo yes
yes
test -a
这里的命令测试 什么?
我尝试info coreutils 'test invocation'
搜索-a
,但没有找到文件特性测试部分,而是在测试连接词部分。
这样的test -a
命令是未记录的一?
注意,我的系统是 Ubuntu 13.10,我的man test
说GNU coreutils 8.20 2012 年 10 月测试版(1)。
答案1
我不确定为什么该info
页面没有它,但运行help test
后bash
给出了答案:
...
File operators:
-a FILE True if file exists.
...
因此它只是一个“存在”测试,没有检查其他权限/属性。
答案2
如果您正在中运行test
或,则它实际上可能是内置版本,而不是中的版本:[
bash
coreutils
/usr/bin
$ type test
test is a shell builtin
$ type [
[ is a shell builtin
尽管如此,coreutils 版本似乎实现了和-a
,-e
并且行为完全相同。也许-a
没有反映在手册页中,因为它不是标准,所以可能是后来添加的,而那个人忘记相应地更新手册页。但我不能说我知道添加它背后的历史(甚至不知道应该a
缩写什么)。
答案3
-a
是用于组合条件的 AND 运算符,因此如果两个目录都存在,则以下内容显示“是”:
[ -e /root -a -e /usr ] && 回应是
将其与默认存在测试的单一条件一起使用似乎保留了旧的行为,但我在旧的手册页中找不到它。
参考(向下滚动后info coreutils 'test invocation'
):
16.3.6 表示 `test' 的连接词
通常的逻辑连接词。
`!EXPR' 如果 EXPR 为假,则为真。
`EXPR1 -a EXPR2' 如果 EXPR1 和 EXPR2 都为真,则为真。
`EXPR1 -o EXPR2' 如果 EXPR1 或 EXPR2 为真则为真。