찾기(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
}

그러나 이것은 그렇습니다(두 번째 테스트 그룹을 제거했습니다).

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인쇄되지 않습니다. 하나의 문서이는 와 실질적으로 동일하기 때문에 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

관련 정보