POSIX 명령의 매개변수는 find
다중 문자 매개변수 이름에 단일 하이픈을 추가하는 반면, 대부분의 다른 프로그램은 다중 단일 문자 플래그를 나타내기 위해 단일 하이픈을 사용하고 다중 문자가 포함된 단일 매개변수 이름을 나타내기 위해 이중 하이픈을 사용하는 이유는 무엇입니까?
일관성이 없는 것 같고 궁금하네요
A. 그것이 실제로 모순되지 않는 이유, 또는
B. 결정의 역사.
답변1
POSIX find는 다른 명령과 같은 옵션을 지원하고 --
다른 명령처럼 옵션의 끝을 표시합니다. 이들은 -H
과 입니다 -L
.
이것은 -print
... -type
옵션이 아니며 때로는술부. 이는 순서가 중요한 인수이며 옵션 뒤에 나타나는 파일 경로 뒤에 나타납니다. 당신은 또한 (
및 !
. 그들은 함께표현하다찾을 파일을 결정하는 데 사용됩니다.
find
유일한 것은 아닙니다. [
(일명 test
) 및 expr
인수가 빌드에 사용되는 다른 명령입니다.표현하다.
예를 들어 find
, [
and로 시작 하고 두 개 이상의 문자( , ...) 를 포함하는 -
연산자가 있습니다.-gt
-eq
처럼 find
, test
그런 질문이 있어요운영자혼란스러울 수도 있다피연산자.
find -- "$file1" "$file2" -type f
[ -f "$file1" -a -f "$file2" ]
그렇다면 뭔가 문제가 있는 것 $file2
입니다 . 그렇다면 그것은 (일부)의 문제이다 .!
find
=
[
모든 및 에 대해 find
옵션 test
을 expr
사용하여 표현식을 작성하는 것은 실제로 작동하지 않습니다. 또 다른 옵션은 문자열을 awk
또는 같은 표현식 으로 평가하는 것입니다 sed
. 그림
find f1 f2 \( -type f -mtime -1 -o ! -type f -newer x \) -exec ls -ld {} +
하다:
find 'found = 0
if (typeof($f) == "f") {
if (age($f) > 1) found=1
} else if (age($f) < age("x")) found = 1
if ($found) exec_multi("ls -ld {}")' f1 f2
그러나 이는 위의 및 명령줄이 인용 악몽을 일으킬 수 있음 을 find
의미합니다 ."x"
실제로 AT&T Research는 다음과 같은 명령을 내렸습니다.대만(트리워커), 그런데 지금은 오픈소스인데도 실제로 AT&T 외부에서 사용되는지는 모르겠다.
답변2
find
--
다중 문자 옵션에 대한 GNU 규칙 보다 우선합니다 . GNU는 단일 문자 옵션( -bar
세 가지 옵션을 의미 -b -a -r
)이 있는 프로그램과 다중 문자 옵션(해당 이름의 단일 옵션을 의미)이 있는 프로그램 -bar
간의 기존 불일치를 깨기 위해 이 규칙을 도입했습니다 . GNU가 나오면 향후 프로그램에 영향을 미칠 수 있지만 find
X11 유틸리티 등과 같은 기존 프로그램은 변경되지 않습니다.
find
옵션과 약간 비슷하기 때문에 조건자 및 작업의 접두사 로 사용됩니다 -
. 특정 명령에 적합한 유한 집합의 일부인 키워드입니다. 옵션처럼 구문 분석되지는 않지만 사전순으로 옵션과 유사합니다.
답변3
특별함을 찾겠다는 의식적인 결정은 없었던 것 같아요. 외에는 참고할만한게 없네요이것이메일 교환, 그러나 내가 기억하는 한(find는 18세기 중반부터 사용되었습니다):
우선 옵션과 인수(프로그램에 대한 명령줄 인수)를 지정하는 데 대한 표준이 없다는 점을 깨달아야 합니다. 다양한 프로그램은 다양한 작업 방식을 구현합니다. 어떤 시점에서는 옵션에 대한 단일 대시와 인수에 대한 대시가 아닌 문자가 일반 명령에서 재사용/복사되었으며 C++ 버전( getopt
셸 또는 C 버전)을 사용할 수 있게 되었습니다. (내가 작업한 *nix 라이브러리에 해당 버전이 없기 때문에 내 버전을 직접 컴파일해야 했던 기억이 납니다.)
물론, 단일 대시, 단일 문자 옵션은 tty 제한 사항을 준수합니다(명령 단축( cp
vs. copy
)도 발생하지만 이는 자체 설명이 아닙니다. find 개발자는 더 명확하고 명확하게 하기 위해 단일 문자 옵션을 길게 선택했을 수도 있습니다. 긴 옵션에 대한 이중 대시가 --
대중화되기 전에(IIRC 중기) 그들은 그렇게 했습니다.
원본 매뉴얼 페이지의 맨 아래에는 다음이 있습니다.
BUGS
The syntax is painful.