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(たとえば、表示される2つのテストの間に明示的な演算子がない場合)、または明示的に指定されている場合、これは印刷されないこと-oを意味します。find . -name afile -o -name bfile -printafile

findしたがって、基本的に2つの「anded」式を括弧で囲むことを想像できます。あなたの

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

として説明された

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

おすすめ記事