"--"(이중 대시) 매개변수는 어디에 기록되어 있나요?

"--"(이중 대시) 매개변수는 어디에 기록되어 있나요?

--파일 이름이 대시로 시작할 때 필요한 "옵션 끝" 신호로 (이중 대시)를 허용하는 일부 유틸리티가 있습니다 .

$ echo "Hello World!" >-file

$ cat -- -file
Hello World!

$ cat -file                      # cat - -file fails in the same way.
cat: invalid option -- 'f'
Try 'cat --help' for more information.

그러나 이러한 유틸리티 중 일부는 매뉴얼 페이지에 그러한 옵션을 표시하지 않습니다.

이것man페이지는cat--모든 운영 체제에서 매개변수의 사용(또는 유효성)은 문서화되어 있지 않습니다 .이것이 치열한 유닉스-리눅스 전쟁을 의미하는 것은 아니다, 이는 타당하고 유용한 관심사라고 생각합니다.

cat, mv, ed(그리고 다른 많은 사람들도) 내가 찾을 수 있는 매뉴얼 페이지에 그러한 옵션을 문서화하지 않았다고 확신합니다.

이는 ./-file보다 이식성이 뛰어난 해결 방법입니다 --. 예를 들어, source(점) 명령( 으로 작성됨 .)은 (일반적으로) 인수를 잘 처리하지 않습니다 --.

$ echo 'echo "Hello World!"' >-file

$ . ./-file
Hello World!

$ . -file
ksh: .: -f: unknown option
ksh: .: -i: unknown option
ksh: .: -l: unknown option
ksh: .: -e: unknown option
Usage: . [ options ] name [arg ...]

$ . -- -file         # works in bash. Not in dash, ksh, zsh.
ksh: .: -file: cannot open [No such file or directory]

답변1

이는 모든 유틸리티에 대한 POSIX 요구 사항입니다.POSIX 12.02장, 자세한 내용은 가이드 10을 참조하세요.

첫 번째--옵션 인수가 아닌 인수는 옵션의 끝을 나타내는 구분 기호로 허용되어야 합니다. 후속 인수는 '-'문자로 시작 하더라도 피연산자로 처리되어야 합니다 .

POSIX는 모든 유틸리티가 이러한 지침을 따를 것을 권장합니다.

몇 가지 예외가 있습니다.좋아요 echo(읽기 옵션). 그리고지침을 따르지 않는 특수 내장 함수(예 break: dot, exec등):

일부 특수 내장 함수는 XBD 유틸리티 구문 지침을 준수하는 것으로 설명됩니다. 그렇지 않은 경우 유틸리티 설명의 기본 요구 사항은 폐기할 첫 번째 인수로 "--"를 식별하는 것이 적용되지 않으며 준수 애플리케이션은 해당 인수를 사용해서는 안 됩니다.

목적은 POSIX 매뉴얼 페이지의 지침을 따르지 않는 모든 명령을 문서화하는 것입니다.POSIX 12.02장세 번째 단락:

일부 표준 유틸리티는 이러한 지침을 모두 충족하지 않습니다. 이러한 경우 편차는 옵션 섹션에 설명되어 있습니다.

~처럼POSIX cat매뉴얼 페이지기록의 OPTIONS 섹션에는 편견이 없으며 --유효한 주장으로 받아들여질 것으로 예상됩니다.

지침을 따르지 않는 (버그가 있는) 구현이 여전히 있을 수 있습니다.

특히, 대부분의GNU 핵심 유틸리티는 이 가이드를 따릅니다.

답변2

GNU 사용자 영역이 있는 Linux 운영 체제: Debian, RedHat, Ubuntu, Mint 등(일부 BSD 아님)의 경우 GNU 일반 관행이 매우 중요합니다.

귀하의 질문에 있는 유틸리티 목록의 공통점은 모두 GNU이며 실제로 모두 GNU coreutils라는 것입니다. 이것GNU coreutils의 전체 목록더 길게.

대부분의 GNU 유틸리티는 공통 사용자 인터페이스와 , 및 사용된 신호와 같은 기본 명령줄 옵션의 공통 세트를 --help공유 --version합니다 --.옵션 끝.

항목은 다음 위치에 있습니다 info common.GNU 웹페이지포함하다:

이러한 모든 프로그램에서는 특정 옵션을 사용할 수 있습니다. 모든 프로그램에 대해 동일한 설명을 작성하는 대신 여기에서는 각 프로그램을 설명합니다. (사실 모든 GNU 프로그램은 이러한 옵션을 허용합니다(또는 허용해야 합니다).

'--'는
옵션 목록을 구분합니다. 후속 인수(있는 경우)는 "-"로 시작하더라도 피연산자로 처리됩니다. 예를 들어, "sort -- -r"은 -r이라는 파일에서 읽습니다.

이 항목에 액세스하는 --더 정확한(그러나 해석하고 기억하기 쉽지 않은) 명령은 (정확히 복사하십시오)입니다 info -- cat --.

답변3

에도 기록되어 있습니다.getopt(1)그리고getopt(3).

예를 들어,

"--" 인수 뒤에 오는 각 인수는 항상 옵션이 아닌 인수로 해석됩니다.

답변4

--옵션의 끝을 나타내며 사용 중인 셸의 일부로 추가 옵션 처리를 비활성화합니다.

또한 man cat쉘 매뉴얼에 설명된 대로 공백이 명령 옵션 사이의 구분 기호라는 점을 설명하지 않습니다.

어떤 쉘을 사용합니까?/bin/bash? 따라서 귀하의 질문에 대한 대답은 입니다 man bash. 이는 쉘 기능의 일부로 해석되기 때문에 명령 기능의 일부가 아닙니다.


업데이트: 이는 올바르지 않습니다.

정정해주셔서 감사합니다. 내가 언급한 내용은 대부분의 내장 쉘 명령에 적용됩니다(매뉴얼에서 달리 언급하지 않는 한). 그러나 외부 명령의 경우 POSIX 규칙이 필요합니다.

관련 정보