find 命令中的运算符优先级?

find 命令中的运算符优先级?

请参见下面的示例:

$ ls -1p
appledir/
applefile
orangedir/
orangefile
$ find . -type f -name apple\*
./applefile
$ find . -type f -name orange\*
./orangefile
$ find . -type f -name apple\* -o -name orange\*
./applefile
./orangedir
./orangefile
$ find . -type f \( -name apple\* -o -name orange\* \)
./applefile
./orangefile
$ 

我惊讶地发现我需要括号才能使其按预期工作;显然我还没有内化评估其论点的优先规则find

如何轻松预测何时需要以及何时不需要使用括号来显式对find初选进行分组?

换句话说,我可以想象的规则是什么find 插入我给它的命令中添加括号,这将使我能够准确预测它将如何评估未分组的表达式?

答案1

根据文档,

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

所以基本上你可以想象find默认情况下用括号包围任何两个“anded”表达式。你的

find . -type f -name apple\* -o -name orange\*

被解释为

find . \( -type f -name apple\* \) -o -name orange\*

相关内容