我尝试使用不同类型的匹配在几个不同的文件中进行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的位置,现在我得到了一个匹配(但它可能仍然忽略了&&之后的所有内容。)
使用&&似乎在我的其他服务器上工作。有什么想法会导致这种情况吗?
答案 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"
$