레이몬드에서 인용 @jasonwryan에 의해 몇 가지 유용한 정보를 가지고 있지만, 이야기의 중간에 시작 :
- Unix는 축소 된 Multics 버전으로 시작했으며, 그 동안 Unix의 기능은 종종 다른 시스템에서 보거나 사용 된 기능의 모방 또는 개조였습니다.
'-'
옵션 문자는 멀 틱스에 사용되었다. Bitsavers에는 사용자 명령에 대한 매뉴얼이 있습니다 .
- 다른 시스템은 다른 문자를 사용했으며 일부는 키 입력 효율성이 더 높으며 (예 :
'/'
TOPS 및 VMS에 사용) 일부 '('
는 (VM / SP CMS에 사용되는) 더 적은 문자 를 사용했습니다.
- Multics 옵션 은 여러 문자로 구성되었습니다 (예 : 밑줄로 분리 된 키워드).
- Longs Multics 옵션은
-print
vs -pr
(3-8 페이지) 와 같이 짧고 축약 된 형태 인 경우가 많습니다 .
- 유닉스 옵션은 단일 문자
getopt
였으며 몇 년 후 소개되었습니다. 원래 유닉스에 포함되지 않았기 때문에 사용하지 않고 getopt
그대로 남겨진 유틸리티 가 있습니다. 그러나 getopt
프로그램 일관성을 유지하는 데 도움이되었습니다.
반면, 유닉스 옵션 getopt
은 단일 문자였습니다. 다른 시스템, 특히 더 큰 시스템에서는 키워드가 사용되었습니다. 일부 (모두는 아님)로 해당 키워드를 축약 할 수있었습니다 . 즉, 옵션이 명확하지 않은 한 모든 문자가 제공되는 것은 아닙니다. 모호성에 대한 테스트에는 함정이 있습니다. 예를 들면 다음과 같습니다.
- 1985 년 초, 저는 PrimOS 로 포팅 해야하는 프로그램을 진행하고있었습니다 . Prime의 개발자는 서로 다른 언어를 모방 한 명령 언어를 제공하여 각기 다른 회사와 경쟁했습니다. 물론 VMS처럼 약어를 지원했습니다. 온라인 도움말을 읽은 후을 입력
sta
하고 싶었 습니다 status
. 그것은의 약어였으며 시작할start
것도 아무것도주지 않았으므로 명령 통역사가 저를 로그 오프했습니다.
- X 툴킷 ( xterm에 의해 사용 )은 약식 옵션을 허용합니다. xterm에서이를 효과적으로 사용하려면 명령 매개 변수를 사전 처리하여
-v
(버전의 경우)보다 -vb
(비주얼 벨) 선호해야합니다 . X 툴킷은 모호성이있을 때 선호하는 옵션을 직접 지정할 수있는 방법이 없습니다.
이러한 모호한 가능성으로 인해 일부 개발자는 약어를 허용하지 않는 것을 선호합니다. 예를 들어 Lynx 는 약어를 허용하지 않고 여러 문자 옵션을 사용합니다.
모든 프로그램은 사용 getopt
: tar
및 ps
하지 않았다. 대시가 선택적인 위치와 옵션 값이 선택적인 부분을 기록하여 알 수 있듯이 rcs
(또는 sccs
) 도 아닙니다 .
이 모든 것을 고려하여 GNU 개발자 getopt
는 각 짧은 옵션의 긴 버전을 제공하도록 확장 하여 다른 시스템에서 사용되는 키워드 옵션을 조정했습니다 . 예를 들어 textutils 1.0 changelog는
Tue May 8 03:41:42 1990 David J. MacKenzie (djm at abyss)
* tac.c: Use regular expressions as the record boundaries.
Give better error messages.
Reformat code and make it more readable.
(main): Use getopt_long to parse options.
fileutils의 변화는 이전에있었습니다 :
Tue Oct 31 02:03:32 1989 David J. MacKenzie (djm at spiff)
* ls.c (decode_switches): Add long options, using getopt_long
instead of getopt.
누군가가 여전히 더 일찍 찾을 수 있지만 파일 헤더에 가장 빠른 날짜가 표시되는 것 같습니다.
/* Getopt for GNU.
Copyright (C) 1987, 1989 Free Software Foundation, Inc.
예를 들어 X Toolkit (1987)과 동시에 사용됩니다. 당신이 (같은 익숙한 유닉스 유틸리티의 대부분은 ls
, ps
) 매뉴얼에주기적인 방문을 필요로하는 기존의 단일 문자 옵션을 사용했다. 을 소개 할 때 getopt_long
GNU 개발자는 먼저 새로운 옵션을 추가 하여이 작업을 수행하지 않았습니다 . 기존 옵션을 표로 작성하고 일치하는 긴 옵션을 제공하는 것으로 시작했습니다 .
이들이 기존 레퍼토리에 추가 했기 때문에 기존 옵션과의 충돌 문제가 다시 발생했습니다. 이를 피하기 위해 긴 옵션 앞에 두 개의 대시를 사용하여 구문을 변경했습니다.
이러한 프로그램은 getopt_long
일반적인 이유로이 방식으로 계속 사용 됩니다.
- 스크립트는 옵션에 따라 다릅니다. 개발자는 스크립트를 깨뜨리고 싶어하지 않습니다
- 서면 코딩 표준 이 있습니다 (유효 할 수 있음)
- BSD와 GNU 개발자가 서로 옵션 이름을 복사하는 것은 명백히 호환되지 않는 경쟁 도구 세트를 만든 사람이 없습니다.
-
는 기술적으로 하이픈 이라고합니다 . 대부분의 경우 em 대시 (—), 때로는 en 대시 (–)를 나타 내기 위해 "dash"라는 단어를 사용하지만 둘 다 하이픈 (-)이 아닙니다.