문자에 단일 대시를 사용하고 단어에 이중 대시를 사용하는 규칙은 어디에서 왔습니까? 계속 사용하는 이유는 무엇입니까?
예를 들어 을 입력하면 다음과 ls --help
같이 표시됩니다.
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author with -l, print the author of each file
-b, --escape print octal escapes for nongraphic characters
--block-size=SIZE use SIZE-byte blocks
-B, --ignore-backups do not list implied entries ending with ~
...
나는 - and -- convention
따옴표를 사용하여 인터넷 검색을 시도했지만 거의 성공하지 못했습니다.
답변1
존재하다유닉스 프로그래밍의 예술Eric Steven Raymond는 이 관행의 발전을 다음과 같이 설명합니다.
원래 Unix 전통에서 명령줄 옵션은 앞에 하이픈이 오는 단일 문자였습니다. 원래 Unix 스타일은 느린 ASR-33 텔레타이프를 기반으로 개발되었으므로 간결함이 장점입니다. Shift 키를 누르고 있으면 상당한 노력이 필요하므로 소문자를 선호하고 옵션을 활성화하려면 "-"(아마도 더 논리적인 "+" 대신)를 사용하세요.
GNU 스타일은 앞에 두 개의 하이픈이 오는 옵션 키워드(키워드 문자 대신)를 사용합니다. 몇 년 후 상당히 복잡한 일부 GNU 유틸리티에서 단일 문자 옵션 키가 부족해지기 시작했을 때 개발되었습니다(이는 증상을 완화시킬 뿐, 기저질환을 치료하지는 않습니다.). GNU 옵션은 구식 알파벳 수프보다 읽기 쉽기 때문에 여전히 인기가 있습니다. 1
답변2
단일 문자 옵션을 계속 사용하는 한 가지 이유는 서로 연결될 수 있기 때문입니다. ls -ltr
예많은에 비해 입력하기가 더 쉽습니다 ls --sort=time --reverse --format=long
. 여러 번 둘 다 잘 작동합니다. 이 주제를 검색하려면 "unix 명령줄 옵션 규칙"을 시도해 보세요.
답변3
이것레이먼드 인용@jasonwryan에는 몇 가지 유용한 정보가 있지만 이야기 중간부터 시작됩니다.
- Unix는 Multics의 축소 버전으로 시작되었으며, 역사를 통틀어 Unix의 기능은 종종 다른 시스템에서 보고 사용되는 기능을 모방하거나 적용한 것이었습니다.
'-'
옵션 문자는 Multics에서 사용됩니다. Bitsavers에는 매뉴얼이 있습니다사용자 명령.- 다른 시스템은 다른 문자를 사용하는데, 일부는 더 효율적인 키 입력을 요구하는 더 많은 문자를 사용하고(예:
'/'
TOPS 및 VMS에서 사용), 일부는 더 적은 문자를 사용합니다(예:'('
VM/SP CMS에서 사용). - 멀티플렉스 시스템옵션예를 들어 밑줄로 구분된 키워드와 같은 다중 문자입니다.
-print
더 긴 Multics 옵션에는 vs-pr
(3-8페이지) 와 같은 짧은 약어가 있는 경우가 많습니다 .- Unix 옵션은 단일 문자였으며 몇 년 후에는
getopt
소개되었습니다. 원래 Unix의 일부가 아니었기 때문에 일부 유틸리티는 사용되지 않았getopt
으며 그대로 유지되었습니다. 하지만getopt
이는 프로그램의 일관성을 유지하는 데 도움이 됩니다.
반면에 Unix 옵션은 getopt
단일 문자를 사용합니다. 다른 시스템, 특히 모든 대규모 시스템에서는 키워드를 사용합니다. 전부는 아니지만 일부는 다음 키워드를 허용합니다.약칭즉, 옵션이 명확한 경우 모든 문자가 제공되는 것은 아닙니다. 이 퍼지 테스트에는 함정이 있습니다. 예를 들어:
- 1985년 초에 나는 다음으로 이식되어야 하는 프로그램을 개발하고 있었습니다.권한 운영 체제. Prime의 개발자들은 다른 회사를 모방하는(시도한) 명령 언어를 제공하기 위해 다른 여러 회사와 경쟁하여 각 회사에서 가장 일반적으로 사용되는 명령을 제공했습니다. 물론 VMS와 마찬가지로 약어도 지원합니다. 온라인 도움말을 읽은 후 나는
sta
그것을 얻을까 생각하면서 를 입력했습니다status
. 이것은start
아무것도 제공하지 않는 약어입니다.시작, 명령 해석기가 나를 로그아웃시킵니다. - X 툴킷(byxterm)은 약어 옵션을 허용합니다. xterm에서 효과적으로 사용하려면 (시각적 벨소리)
-v
보다 (버전) 을 선호하도록 명령 인수를 전처리해야 합니다.-vb
모호성이 존재하는 경우 X Toolkit에는 선호하는 옵션을 지정할 수 있는 직접적인 방법이 없습니다.
이러한 잠재적인 모호성 때문에 일부 개발자는 약어를 허용하지 않는 것을 선호합니다. 살쾡이예를 들어, 약어를 허용하지 않고 다중 문자 옵션을 사용하십시오.
모든 프로그램이 getopt
: 을 사용하는 것은 아니며 없음 tar
도 사용됩니다 ps
. ...도 아니다rcs
(또는sccs
), 대시는 선택 사항이고 옵션 값은 선택 사항이라는 점을 통해 이를 확인할 수 있습니다.
이 모든 것을 염두에 두고 GNU 개발자는 getopt
다른 시스템에서 사용되는 키워드 옵션을 확장하여 각 짧은 옵션의 긴 버전을 제공하도록 조정했습니다. 예를 들어 textutils 1.0 변경 로그에는 다음과 같이 나와 있습니다.
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)과 유사합니다. 여러분에게 친숙한 대부분의 Unix 유틸리티(예:ls
,ps
)은 기존 단일 문자 옵션을 사용하며 매뉴얼에 정기적으로 액세스해야 합니다. getopt_long
GNU 개발자는 도입할 때 이렇게 하지 않았습니다.첫 번째새로운 옵션을 추가합니다.시작기존 옵션을 나열하고 일치하는 긴 옵션을 제공합니다.
왜냐하면 그들은다음에 추가기존 트랙의 경우 기존 옵션과 충돌하는 문제가 (다시) 발생합니다. 이를 방지하기 위해 긴 옵션 앞에 두 개의 대시를 사용하도록 구문을 변경했습니다.
이러한 프로그램이 계속해서 이런 방식으로 사용되는 이유 getopt_long
는 다음과 같습니다.
- 스크립트는 옵션에 따라 달라집니다. 개발자는 스크립트를 중단하려고 서두르지 않습니다.
- 쓴 사람이 있는데코딩 표준(이것은 효과가 있을 수 있습니다)
- 명백히 호환되지 않는 경쟁 도구 세트를 아무도 생각해 내지 못했습니다(BSD와 GNU 개발자는 서로의 옵션 이름을 복사했습니다).
답변4
이 두 가지 방법을 사용하는 데에는 여러 가지 이유가 있을 수 있습니다. 물론 하나는 전통이다. 프로그래머와 사용자는 인간이며 인간은 사물이 특정 방식으로 작동하기를 기대합니다. 변경할 이유가 없다면(실제로 명령줄의 경우 변경할 이유가 많지 않음) 변경하지 마십시오.
즉, 긴 옵션에 단일 하이픈을 사용하거나 하이픈을 완전히 제거할 수 있는 도구가 있다는 것을 알고 있습니다. 이러한 도구는 처음에는 어려울 수 있으며 통합 시스템에서 눈에 띄는 경향이 있습니다.
둘 사이의 차이점을 배울 때(제2의 천성이 되기 전에), 저는 항상 "짧은" 하이픈이 "짧은" 옵션과 일치하고 "긴"(또는 이중) 하이픈이 "긴" 옵션과 일치한다는 것을 기억합니다.” 옵션이 옵션과 일치합니다. 이중 하이픈 스타일을 개발할 때 이러한 추론이 사용되었는지는 모르겠지만 가능합니다.