検索(1):「A」テストに合格しましたが、「A -o B」テストに失敗しました。

検索(1):「A」テストに合格しましたが、「A -o B」テストに失敗しました。

この関数は何も印刷しません。

skyrimse_testroot() {
    local directory="$1"
    find "$directory" \
        \( -type f -ipath "${directory}/data/scripts/*.pex"        \) -o \
        \( -type d -ipath "${directory}/data/meshes"               \) \
        -print -quit
}

しかし、これはそうです(2番目のテストグループを削除しました)。

skyrimse_testroot() {
    local directory="$1"
    find "$directory" \
        \( -type f -ipath "${directory}/data/scripts/*.pex"        \)  \
        -print -quit
}

$1は絶対パスであり、始点と-ipathパラメータも絶対パスです。

ブール論理に関する私の基本的な知識として、より多くのOR句を肯定的な表現にリンクすると、その表現は否定的な値として評価されるべきではありません。故障したり、私に何か問題があるようですがfind、前者より選択の余地が多いようです。

答え1

速断するとは言えませんが、findテストの優先順位は非常に驚くことがあり、特に操作に関連する方法はさらにそうです。

~からhttps://manpages.debian.org/stable/findutils/find.1.en.html

欠陥なし

演算子の優先順位は素晴らしいです

コマンドはfind . -name afile -o -name bfile -print印刷されません。 1つの文書これは実質的に同じであるため、find . -name afile -o \( -name bfile -a -print \)の優先順位は-aの優先順位よりも高く、-oテスト間に演算子が指定されていない場合は -a想定されます。

したがって、あなたの例では "and"の優先順位が高いので、現在の括弧は必要ありませんが、すべてのテストの周りにそれを追加する必要があります。

find "$directory" \
        '(' \
            -type f -ipath "${directory}/data/scripts/*.pex" \
            -o \
            -type d -ipath "${directory}/data/meshes" \
        ')' \
        -print -quit

関連情報