Skąd wzięła się konwencja używania pojedynczych myślników dla liter i podwójnych myślników dla słów i dlaczego nadal jest używana?
Na przykład po ls --help
wpisaniu zobaczysz:
-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 ~
...
Próbowałem googlować - and -- convention
nawet z niewielkimi sukcesami.
command-line
history
options
Larry
źródło
źródło
-
jest technicznie nazywana łącznikiem . Używamy słowa „myślnik” w odniesieniu do em myślnika (-) w większości przypadków, a czasem en myślnika (-), ale żaden z nich nie jest łącznikiem (-).java -version
find . -delete
-ab
które aktywują zarównoa
ib
. Bez podwójnej deski rozdzielczej,-help
by aktywowaćh
,e
,l
orazp
opcje.Odpowiedzi:
W The Art of Unix Programming Eric Steven Raymond opisuje rozwój tej praktyki:
[1] http://www.faqs.org/docs/artu/ch10s05.html
źródło
Jednym z powodów dalszego korzystania z opcji jednoliterowych jest to, że można je łączyć razem:
ls -ltr
o wiele łatwiej jest pisać niżls --sort=time --reverse --format=long
. Jest wiele razy, gdy oba są dobre w użyciu. Jeśli chodzi o wyszukiwanie w tym temacie, wypróbuj „konwencję opcji wiersza poleceń unix”.źródło
ls --sort=time --reverse --format=long
, nie warto wspominać o tej niestandardowej metodzie.Cytat z Raymondem przez @jasonwryan ma kilka przydatnych informacji, ale zaczyna się w środku tej historii:
'-'
opcji został użyty w Multics. Bitsavers ma instrukcję obsługi poleceń użytkownika .'/'
używane w TOPS i VMS), a niektóre mniej (takie jak'('
używane w VM / SP CMS).-print
vs-pr
(strona 3-8).getopt
zostały wprowadzone. Ponieważ nie był on częścią oryginalnego Uniksa, istnieją narzędzia, które nie były używanegetopt
i pozostały bez zmian .getopt
Pomagając jednak w zapewnieniu spójności programów.Z drugiej strony, używane opcje uniksowe
getopt
były jednoznakowe. Inne systemy, w szczególności wszystkie większe, używały słów kluczowych. Niektóre (nie wszystkie) pozwoliły na skrócenie tych słów kluczowych , tj. Nie wszystkie podane znaki, o ile opcja była jednoznaczna. W tym teście występują niejednoznaczności. Na przykład:sta
, myśląc o otrzymaniustatus
. To był skrótstart
, a ponieważ nie dając nic do rozpoczęcia , interpreter poleceń mnie wylogował.-v
(dla wersji) zamiast-vb
(dzwonek wizualny). Zestaw narzędzi X nie ma bezpośredniego sposobu na określenie preferowanej opcji w przypadku niejasności.Ze względu na ten potencjał niejednoznaczności niektórzy programiści wolą nie dopuszczać skrótów. Na przykład Lynx używa opcji wieloznakowych, nie dopuszczając skrótów.
Nie wszystkie używane programy
getopt
:tar
ips
nie. Nie zrobiłrcs
(lubsccs
), jak widać, zaznaczając gdzie myślnik był opcjonalny, a wartości opcji były opcjonalne.Biorąc to wszystko pod uwagę, programiści GNU dostosowali opcje słów kluczowych używanych w innych systemach, rozszerzając je,
getopt
aby zapewnić długą wersję każdej krótkiej opcji. Na przykład, dziennik zmian textutils 1.0 mówiZmiana w fileutils była wcześniejsza:
i ktoś może znaleźć jeszcze wcześniej, ale wygląda na to, że nagłówek pliku pokazuje najwcześniejszą datę:
który jest (na przykład) współbieżny z X Toolkit (1987). Większość narzędzi uniksowych, które znasz (np.
ls
,ps
) Używała istniejących opcji jednoznakowych, które wymagają okresowych wizyt w podręczniku. Wprowadzającgetopt_long
, programiści GNU nie zrobili tego, najpierw dodając nowe opcje; oni zaczęli przez tabulacja istniejące możliwości i zapewniając dopasowanie długiej opcji.Ponieważ dodawali do istniejącego repertuaru, ponownie pojawił się problem konfliktu z istniejącymi opcjami. Aby tego uniknąć, zmienili składnię, używając dwóch myślników przed długimi opcjami.
Te programy nadal używają
getopt_long
w ten sposób ze zwykłych powodów:źródło
W Wikipedii Interfejs wiersza poleceń jest zgłaszany:
źródło
Domyślam się, że pożądane były bardziej opisowe opcje, a także przy dłuższych opcjach nie będziesz musiał się martwić, że zabraknie opcji pojedynczej postaci.
Gdy zdecydujesz się na długie opcje, masz problem, przynajmniej jeśli planujesz obsługiwać zarówno długie, jak i krótkie opcje. Nie jestem pozytywny, ale wierzę, że odpowiedź arkady ma klucz do tego, dlaczego - i -. Ogólna procedura przetwarzania, np. getopt_long () musiałby wiedzieć, czy pojedynczy argument wiersza poleceń może zawierać wiele opcji, np. -ltr. Zatem procedura przetwarzania musiałaby być w stanie rozróżnić te dwa elementy. Jeśli przeczytam pojedynczy myślnik, -, wówczas reszta argumentu wiersza poleceń może pasować do wielu opcji. Jeśli przeczytam podwójną kreskę, -, wówczas reszta argumentu wiersza poleceń musi pasować do jednej opcji.
Niedawno skorzystałem z getopt_long () i zaczynam lubić długie opcje, ponieważ są łatwiejsze do zapamiętania i samodzielnego dokumentowania. Jeśli mam następujące dwa polecenia:
./aggregator -f 15
./aggregator - czas spłukiwania 15
Powiedziałbym, że drugi z opcją długiej opcji jest bardziej zrozumiały.
źródło
Prawdopodobnie jest kilka powodów, dla których stosuje się te dwie metody. Jednym z nich jest oczywiście tradycja. Programiści i użytkownicy to ludzie, a ludzie oczekują, że wszystko zadziała w określony sposób. Jeśli nie ma powodu do zmiany (a tak naprawdę dla wiersza poleceń nie ma zbyt wiele powodów do zmiany), to nie rób tego.
Biorąc to pod uwagę, wiem, że istnieją narzędzia, które używają pojedynczego łącznika do długiej opcji, a nawet pozbywają się łączników. Narzędzia te mogą być początkowo trudne i mają tendencję do wystawania jako brodawki w skądinąd zunifikowanym systemie.
Kiedy uczyłem się różnicy między nimi (i zanim stało się to drugą naturą), zawsze pamiętałem, że „krótki” łącznik pasuje do „krótkich” opcji, podczas gdy „długi” (lub podwójny) łącznik pasuje do „długich” opcje Nie wiem, czy takie rozumowanie wykorzystano przy opracowywaniu stylu podwójnego łącznika, ale jest to możliwe.
źródło