![찾기(1): 'A' 테스트는 통과했지만 'A -o B' 테스트는 실패했습니다.](https://linux55.com/image/222829/%EC%B0%BE%EA%B8%B0(1)%3A%20'A'%20%ED%85%8C%EC%8A%A4%ED%8A%B8%EB%8A%94%20%ED%86%B5%EA%B3%BC%ED%96%88%EC%A7%80%EB%A7%8C%20'A%20-o%20B'%20%ED%85%8C%EC%8A%A4%ED%8A%B8%EB%8A%94%20%EC%8B%A4%ED%8C%A8%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
이 함수는 아무것도 인쇄하지 않습니다.
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