쉘/유틸리티가 아닌 것 같아요역사적인유닉스도 "최근" 제품이 아닙니다.4.4BSD이중 대시(또는 두 개의 연속 하이픈) 사용을 지원합니다.옵션 구분 기호 끝. 그리고FreeBSD, 예를 들어 다음에서 볼 수 있습니다.rm
맨페이지그리고2.2.1 출시(1997). 그러나 이것은 단지 명령에 대한 문서일 뿐입니다.
가장 오래된 것을보고GNU 파일 도구 변경 로그내가 찾을 수 있는 것은 다음 과 같습니다 (약간 수정됨).
Tue Aug 28 18:05:24 1990 David J. MacKenzie (djm at albert.ai.mit.edu)
* touch.c (main): Don't interpret first non-option arg as a <---
time if `--' is given (POSIX-required kludge).
* touch.c: Add long-named options.
* Many files: Include <getopt.h> instead of "getopt.h" since
getopt.h will be in the GNU /usr/include.
* install.c: Declare some functions.
* touch.c, getdate.y, posixtime.y, mktime.c: New files, from bin-src.
* posixtime.y: Move year from before time to after it (but
before the seconds), for 1003.2 draft 10.
이는 이전보다리눅스. 이름에 시간과 같은 자릿수가 포함된 파일을 만들고 싶을 수도 있다는 사실을 고려한 것 같습니다.사양(십진수 8자리 또는 10자리) - 기존 파일에 타임스탬프를 지정하는 대신...
- 이것도 이렇다POSIX.1이중 대시(
--
)를 다음과 같이 소개합니다.옵션 끝 구분 기호유닉스 쉘에서? - 90년대 초반 일부 사람들이 파일 이름에 숫자를 사용하기를 원했기 때문에 이 모든 것이 시작되었고
touch
, 이것이 10년 동안 한 번에 유틸리티 하나씩 단편적으로 계속되었습니까? - 변경 로그에 뜨는 댓글은 무엇에 관한 것인가요?
- 언제가이드 10(매개변수 - 옵션의 끝을 나타내는 구분 기호로 허용되어야 합니다. [...]) POSIX 소개실용문법?
1. 상대적인이것즉, 기록긴 옵션전역적으로 사용되는 모든 명령 중에서 이는 관련이 없습니다. 반면에 구분 기호에 대한 참조를 볼 수 있습니다.나타나다비슷한 문제로암소 비슷한 일종의 영양 rm.c코멘트로 2000, 이전노출된2005년 최종 사용자에게(진단 선행 하이픈기능). 그러나 그것은 모두 훨씬 나중의 일이었고 매우 구체적인 사용 사례에 관한 것이었습니다.
답변1
--
내가 아는 한 옵션 끝 표시로 및 의 사용은 System III Unix(1980)에서 시작되었습니다 sh
.getopt
이에 따르면본 쉘 가족 역사, 본 쉘첫 번째나타나다버전 7 유닉스(1979). 하지만 그건 어쩔 수 set
없지매개변수와 옵션을 분리하세요. 따라서 원래 Bourne 쉘은 다음을 수행할 수 있습니다.
set -e
- 오류 종료 모드를 켭니다.set arg1 arg2 ...
- 위치 매개변수 등을 설정합니다$1=arg1
.$2=arg2
하지만: set arg1 -e arg2
당신에게 줄 것입니다 $1=arg1
, $2=arg2
, 그리고열기 오류 종료. 이런.
시스템 III 유닉스(1980)은 오류를 수정하고 다음 에 따라 getopt
. 를 도입했습니다.getopt
매뉴얼 페이지:
NAME
getopt - parse command options
SYNOPSIS
set -- `getopt optstring $∗`
DESCRIPTION
Getopt is used to break up options in command lines for easy parsing by
shell procedures, and to check for legal options. Optstring is a
string of recognized option letters (see getopt(3C)); if a letter is
followed by a colon, the option is expected to have an argument which
may or may not be separated from it by white space. The special option
-- is used to delimit the end of the options. Getopt will place -- in
the arguments at the end of the options, or recognize it if used
explicitly. The shell arguments ($1 $2 . . .) are reset so that each
option is preceded by a - and in its own shell argument; each option
argument is also in its own shell argument.
내가 아는 한 이것은첫 번째나타나는 곳.
그 이후로 1980년대의 비표준 시대에 다른 명령에서는 매개변수 구문 분석의 모호함을 해결하기 위해 이 규칙을 채택한 것으로 보입니다 (예: --
위에 인용된 touch
및 예 ).rm
이러한 단편적인 채택 중 일부는 성문화되었습니다.POSIX.1(1988), "POSIX-required kludge"에 대한 변경 로그 설명이 나온 곳입니다.
하지만 그때까지POSIX.2(1992)는 다음과 같이 믿었다.유틸리티 구문 가이드유명한 격언 10을 포함하는 채택되었습니다.
Guideline 10: The argument "--" should be accepted as a delimiter
indicating the end of options. Any following
arguments should be treated as operands, even if they
begin with the '-' character. The "--" argument
should not be used as an option or as an operand.
이것이 "함께 자갈을 엮은 것"에서 보편적으로 권장되는 것으로 바뀌는 곳입니다.