요즘 리눅스에서 쉘을 배우고 있습니다. 질문이 있습니다.
다음 명령을 참조하십시오:
$ find . -name '*.c' -or -name '*.cpp'
위 명령은 다음 명령과 같이 내부적으로 처리되나요?
$ find . -name '*.c' -and -print -or -name '*.cpp' -and -print
답변1
man find
설명하다:
If the whole expression contains no actions other than -prune or -print,
-print is performed on all files for which the whole expression is true.
그렇습니다. 동일하지만 다음과 같이 생각하는 것이 더 쉬울 것입니다.
find . \( -name '*.c' -or -name '*.cpp' \) -and -print
또는 더 간단하고 POSIX를 준수합니다.
find . \( -name '*.c' -o -name '*.cpp' \) -print
답변2
기본적으로 이 두 명령은 동일한 의미를 가지며 동일한 출력을 표시합니다. 더 짧은 경로가 있는데 왜 더 오래 걸리나요?
답변3
OR 및 AND 연산자는 부울 논리를 따릅니다.
프리미티브 A = -name '*.c'
, B = -name '*.cpp'
, C = 에 대해 -print
다음 방정식이 있습니다.
첫 번째 예: (A+B).C
두 번째 예: (AC)+(BC)
그들은 단순한 수학적 동등성을 가지고 있습니다. 즉, 그들은 동일합니다. 그러나 첫 번째 것은 더 짧고 간결합니다.