이중 대시 (-)가 유닉스 / 리눅스에서 옵션 구분 기호로 언제 어떻게 도입 되었습니까? is given

역사적 유닉스 의 쉘 / 유틸리티 나 옵션 구분 기호끝으로 이중 대시 (또는 두 개의 연속 하이픈)를 사용하여 4.4BSD가 지원하는 “최근”의 생각은 없습니다 . 로 FreeBSD의 , 당신은 인스턴스에 대한 도입 메모 볼 수 있습니다 2.2.1 릴리스 (1997). 그러나 이것은 하나의 명령에 대한 문서 일뿐입니다.rm

내가 찾을 수 있는 가장 오래된 GNU 파일 유틸리티 변경 로그를 살펴보면이 1 (약간 변경)을 볼 수 있습니다 .

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.

이것은 리눅스 이전의 것이다. 기존 파일에 타임 스탬프를 지정하는 대신 시간 사양 과 동일한 자릿수 (10 또는 10 자리 10 진수)를 포함하는 이름의 파일을 만들 수 있다는 사실을 분명히 설명 합니다.


  • 그렇다면 posix.1 은 유닉스 쉘에서 옵션 구분 기호-- 으로 이중 대시 ( ) 를 도입 했습니까?
  • 일부 사람들은 touch90 년대 초 에 파일 이름에 숫자를 사용하기를 원했기 때문에이 모든 것이 시작 되었습니까? 그리고 이것은 10 년 동안 한 번에 하나의 유틸리티로 단편적인 방식으로 진행 되었습니까 ?
  • 변경 로그에 대한 언급이 무엇입니까?
  • 가이드 라인 10 ( 인수 -. 옵션의 끝을 나타내는 구분 기호로 인정해야한다 […] )을 POSIX에 도입 유틸리티 구문 ?

1. 반대로 문서화, 즉 긴 옵션 관련이 세계적으로 모든 명령 사용량을. 반면에, 당신은 구분 기호를 참조 볼 수 표시 같은에서 GNU의 rm.c 되기 전에, 주석으로 2000 년에 노출 된 2005 년 최종 사용자에게합니다 ( diagnose_leading_hyphen의 기능). 그러나 이것은 훨씬 나중에이며 매우 구체적인 사용 사례에 관한 것입니다.



답변

지금까지 내가 말할 수있는, 사용 --끝 옵션 마커로 시작으로 sh하고 getopt시스템 III 유닉스 (1980)에서.

Bourne Shell 제품군의 이력에 따르면 Bourne Shell 은 버전 7 Unix (1979) 에 처음 등장했습니다 . 그러나 옵션과 인수분리 하는 방법은 없었습니다 . 따라서 원래 Bourne 쉘은 다음을 수행 할 수 있습니다.set

  • set -e -오류 발생시 종료 모드를 켭니다
  • set arg1 arg2 ...– 파라미터 세트의 위치 $1=arg1, $2=arg2등을

그러나 : set arg1 -e arg2당신을 줄 것이다 $1=arg1, $2=arg2그리고 출구에 오류를 켭니다 . 으악.

System III Unix (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.

내가 알 수있는 한, 그것이 가장 먼저 나타납니다.

거기에서, 다른 명령이 채택 된 것으로 보인다 --인수 구문 분석 모호성 해결하기 위해 규칙 (예와 예제 등을 touch하고 rm야생을 통해 1980 년대, 비표준 일 위에서 인용).

이러한 단편적 채택 중 일부는 POSIX.1 (1988) 에서 체계화되었으며 , 여기서 “POSIX- 필수 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.

그리고 그것이 “kludge”에서 보편적 인 권고로가는 곳입니다.