&安培;&安培;尝试grep几个文件时会被忽略

时间:2014-02-17 16:57:19

标签: if-statement grep ignore

我尝试使用不同类型的匹配在几个不同的文件中进行grep。但出于某种原因,它似乎忽略了&&。之后的争论。

$ grep -E -i "err|warn" h2_backups.log storagefolder_backups.log
$ grep -E -i 'err|warn' exports.log imports.log
exports.log:err
$ grep -E -i "err|warn" h2_backups.log storagefolder_backups.log && grep -E -i 'err|warn' exports.log imports.log
$ grep -E -i 'err|warn' exports.log imports.log && grep -E -i "err|warn" h2_backups.log storagefolder_backups.log
exports.log:err

如您所见,第一个grep不包含错误,但第二个grep包含错误。在第三行,我首先使用了没有错误匹配的grep,这忽略了&&之后的所有内容。在第四行,我已经切换了greps的位置,现在我得到了一个匹配(但它可能仍然忽略了&&之后的所有内容。)

使用&&似乎在我的其他服务器上工作。有什么想法会导致这种情况吗?

1 个答案:

答案 0 :(得分:2)

根据短路评估,这是正常行为。你在做command1 && command2。如果command1返回False,则不会评估command2,因为整个条件已经为假。


参见一个非常简单的例子:

$ cat a
hello

grep "hello"会返回一些内容,而grep "bye"则不会:

$ grep "hello" a
hello
$ grep "bye" a
$

因此添加&& echo "yes"时的行为:

$ grep "hello" a && echo "yes"
hello
yes
$ grep "bye" a && echo "yes"
$