단일 대시 "-"는 단일 문자 옵션을 나타내고 이중 대시 "--"는 단어를 나타냅니다.

단일 대시 "-"는 단일 문자 옵션을 나타내고 이중 대시 "--"는 단어를 나타냅니다.

문자에 단일 대시를 사용하고 단어에 이중 대시를 사용하는 규칙은 어디에서 왔습니까? 계속 사용하는 이유는 무엇입니까?

예를 들어 을 입력하면 다음과 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

[1]http://www.catb.org/esr/writings/taoup/html/ch10s05.html

답변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_longGNU 개발자는 도입할 때 이렇게 하지 않았습니다.첫 번째새로운 옵션을 추가합니다.시작기존 옵션을 나열하고 일치하는 긴 옵션을 제공합니다.

왜냐하면 그들은다음에 추가기존 트랙의 경우 기존 옵션과 충돌하는 문제가 (다시) 발생합니다. 이를 방지하기 위해 긴 옵션 앞에 두 개의 대시를 사용하도록 구문을 변경했습니다.

이러한 프로그램이 계속해서 이런 방식으로 사용되는 이유 getopt_long는 다음과 같습니다.

  • 스크립트는 옵션에 따라 달라집니다. 개발자는 스크립트를 중단하려고 서두르지 않습니다.
  • 쓴 사람이 있는데코딩 표준(이것은 효과가 있을 수 있습니다)
  • 명백히 호환되지 않는 경쟁 도구 세트를 아무도 생각해 내지 못했습니다(BSD와 GNU 개발자는 서로의 옵션 이름을 복사했습니다).

답변4

이 두 가지 방법을 사용하는 데에는 여러 가지 이유가 있을 수 있습니다. 물론 하나는 전통이다. 프로그래머와 사용자는 인간이며 인간은 사물이 특정 방식으로 작동하기를 기대합니다. 변경할 이유가 없다면(실제로 명령줄의 경우 변경할 이유가 많지 않음) 변경하지 마십시오.

즉, 긴 옵션에 단일 하이픈을 사용하거나 하이픈을 완전히 제거할 수 있는 도구가 있다는 것을 알고 있습니다. 이러한 도구는 처음에는 어려울 수 있으며 통합 시스템에서 눈에 띄는 경향이 있습니다.

둘 사이의 차이점을 배울 때(제2의 천성이 되기 전에), 저는 항상 "짧은" 하이픈이 "짧은" 옵션과 일치하고 "긴"(또는 이중) 하이픈이 "긴" 옵션과 일치한다는 것을 기억합니다.” 옵션이 옵션과 일치합니다. 이중 하이픈 스타일을 개발할 때 이러한 추론이 사용되었는지는 모르겠지만 가능합니다.

관련 정보