Linux test-a 命令测试用来做什么?

Linux test-a 命令测试用来做什么?

请看一下下面的代码,

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 testGNU coreutils 8.20 2012 年 10 月测试版(1)

答案1

我不确定为什么该info页面没有它,但运行help testbash给出了答案:

...
    File operators:

  -a FILE        True if file exists.
...

因此它只是一个“存在”测试,没有检查其他权限/属性。

答案2

如果您正在中运行test或,则它实际上可能是内置版本,而不是中的版本:[bashcoreutils/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 为真则为真。

相关内容