나는 이것을 둘러 보았지만 그것에 대해 아무것도 찾을 수 없습니다.
나는 항상 궁금했습니다. 대부분의 다른 내장 bash 명령이 -flag arg1 arg2 명령 형식(예: cp -r dir1/dir2/)을 갖는 이유는 무엇입니까? 그러나 여기서 find 명령은 어떻게든 두 인수 사이의 중간에 플래그를 넣습니다. ?
find path/ -name pattern
이것은 나에게 일관성이 없으며 기억하기 어렵습니다. 타당한 이유가 있나요? 내가 모르는 어떤 컨벤션이 있나요?
답변1
명령이 먼저 나오고 일관성은 나중에 추가됩니다.
가장 먼저 찾을 수 있는 맨페이지는 다음과 같습니다.
find
경로명 표현식
find
1970년대부터 순서 및 구문(옵션에 대시가 필요한지 여부)에 대한 가정이 다양한 명령에 추가되었습니다.~ 후에(예: 1980년대 후반 및 1990년대 초반) 사용자가 다양한 명령의 구문을 기억하는 데 도움이 됩니다. 예를 들어, 의 경우 find
개발자는 몇 가지 불일치를 인식하게 되었습니다.
실수
장치 유형을 확인할 수 없습니다.
구문은 다음과 동일해야 합니다.만약에.
따라서 정답은 명령이 원래 개발자에게 의미가 있었고 주요 변경 사항이 적용되지 않았다는 것입니다.
답변2
몇 가지 사항을 혼동하신 것 같습니다. Shell 도 내장 함수가 find
아닙니다 . cp
명령의 유일한 매개변수 find
는 경로이고 나머지는 옵션과 해당 값이지만 이는 단지 의미일 뿐이며 여기서는 차이점이 그다지 중요하지 않습니다. 더 중요한 것은 옵션 플래그에는 두 가지 범주가 있다는 것입니다. 주장을 받아들이는 자와 받아들이지 않는 자. 가장 일반적인 형식은 다음과 같습니다.
command -flag flagValue
많은 프로그램이 단일 문자 플래그( command -f
)를 사용하지만 많은 프로그램은 단일 문자와 긴 옵션을 모두 사용합니다(예: 거의 모든 GNU 도구). cp
이것이 유효한 명령 이라고 언급하셨습니다 cp
.
cp -dR --preserve=all -i --dereference foo bar baz/
일반적으로 가장 일반적인 "표준" 형식은 실제로 다음과 같습니다.
command -flag1 -flag2 value1 -flag3 value2 ARGUMENTS
즉, 많은 플래그는 단순한 부울 값이 아니지만 값을 가질 수도 있습니다. 찾기도 예외는 아닙니다. cp
인용한 플래그 의 경우 에도 마찬가지입니다.
cp -t /foo -u file1 file2 fileN
따라서 대부분의 명령은 제대로 구성되지 않았 command -flag arg1 arg2
으며 실제로는 정반대입니다. 그것은 단지 사용된 플래그에 달려 있습니다. 개발자가 왜 이 특정 형식을 선택했는지 에 대해서는 find
개발자에게 물어봐야 할 것 같습니다.
답변3
find
cpio
대부분의 원래 Unix 유틸리티 작성자가 아닌 Dick Haight가 만들었습니다 . 당시에는 라이브러리로 연결될 수 있는 명령줄 인수 구문 분석 라이브러리가 없었기 때문에 일관성을 강제/인센티브화할 수 있었습니다(80년대 중반에는 getopt
여러 시스템에 소스 코드가 있었습니다).
사람들이 스크립트에서 명령과 해당 인수를 사용하면 기존 함수의 구문을 변경하기가 어렵습니다.
답변4
find
옵션에 의해 제어되는 단순한 명령이 아닌, 자체 제어 언어를 구현한 명령입니다.
CLI는 find
다음과 같습니다:
find [options] path1..pathn [expression]
-H
여기서 , -L
및 같은 옵션이 사용 -P
됩니다 .expression
find control language
: 와 같은 인수 는 기본 연산자이고 완전한 표현식은 와 같은 필터 및 연산에 대한 수학적 설명 으로 생각할 수 있기 때문에 -name
호출됩니다 .primaries
-print
-exec
find command language
매우 강력하지만 여전히 배우기 쉬운 언어입니다 . 디렉토리 트리를 탐색하고 전통적인 UNIX 명령줄 옵션만을 사용하여 동작을 달성하려는 프로그램은 일반적으로 약하거나 배우기 어렵습니다. 예를 들어 GNU tar
vs. star
(후자는 find command language
.