find:“-a”的优先级高于“-o”是什么意思?

find:“-a”的优先级高于“-o”是什么意思?

gnu find 的手册页指出:

请注意,当隐式指定(例如,两个测试之间没有显式运算符)或显式指定时,-a 的优先级高于 -o。这意味着
find . -name afile -o -name bfile -print
永远不会打印文件。

我猜上面的表达式相当于:

find . -name afile -o -name bfile -a -print

我的问题是,这个表达式是如何工作的?为什么afile永远不会被打印?

答案1

-and/运算符-a是逻辑运算符操作员。不必指定它们,因为它们是由两个表达式并置暗示的。

是的,它不会在afile您使用时打印find . -name afile -o -name bfile -a -print运算符的优先级高于或者操作员-or/ -o。如果您想afile打印,您有两种选择:

第一个选项:

正如 @malo 提到的,通过运行find . \( -name afile -o -name bfile \) -a -print您可以afile打印出结果,因为括号在 GNU 和 BSD 版本中的 Find 命令中具有最高优先级。

第二种选择:

通过不传递-print选项。所以会是这样find . -name afile -o -name bfile,原因是,没有什么优先级比 更高-o

答案2

您应该使用括号,因为它们的优先级高于-a

find . \( -name afile -o -name bfile \) -a -print

相关内容