Unix/Linux에서 옵션 구분 기호 종결자로 이중 대시(--)가 언제, 어떻게 도입되었습니까?

Unix/Linux에서 옵션 구분 기호 종결자로 이중 대시(--)가 언제, 어떻게 도입되었습니까?

쉘/유틸리티가 아닌 것 같아요역사적인유닉스도 "최근" 제품이 아닙니다.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.

이것이 "함께 자갈을 엮은 것"에서 보편적으로 권장되는 것으로 바뀌는 곳입니다.

관련 정보