Das Zitat von Raymond von @jasonwryan enthält einige nützliche Informationen, beginnt jedoch in der Mitte der Geschichte:
- Denken Sie daran, dass Unix als eine Version von Multics mit reduziertem Umfang gestartet wurde und dass die Funktionen in Unix im Verlauf der Geschichte häufig Nachahmungen oder Anpassungen von Funktionen waren, die auf anderen Systemen angezeigt und verwendet wurden.
- Das
'-'
Optionszeichen wurde in Multics verwendet. Bitsavers hat ein Handbuch für seine Benutzerbefehle .
- Andere Systeme verwendeten andere Zeichen, von denen einige behaupten, dass sie effizienter
'/'
für Tastatureingaben sind (z. B. für TOPS und VMS) und andere weniger (z. B. '('
für VM / SP CMS).
- Multics- Optionen bestanden aus mehreren Zeichen, z. B. durch Unterstrich getrennte Schlüsselwörter.
- Längere Multics-Optionen hatten häufig eine kürzere, abgekürzte Form, z. B.
-print
vs -pr
(Seite 3-8).
- Unix-Optionen bestanden aus einem Zeichen und wurden nach einigen Jahren
getopt
eingeführt. Da es nicht Teil des ursprünglichen Unix war, gibt es Dienstprogramme, die nicht verwendet wurden getopt
und unverändert belassen wurden. Aber dabei getopt
geholfen, Programme konsistent zu machen.
Auf der anderen Seite waren Unix-Optionen mit einem getopt
Zeichen. Andere Systeme, insbesondere alle größeren, verwendeten Schlüsselwörter. Einige (nicht alle) erlaubten die Abkürzung dieser Schlüsselwörter , dh nicht alle Zeichen, solange die Option eindeutig war. Bei diesem Test gibt es Fallstricke hinsichtlich der Mehrdeutigkeit. Zum Beispiel:
- Anfang 1985 arbeitete ich an einem Programm, das auf PrimOS portiert werden musste . Die Entwickler von Prime konkurrierten mit mehreren anderen Unternehmen, indem sie eine Befehlssprache anboten, die die jeweils am häufigsten verwendeten Befehle nachahmte. Natürlich unterstützten sie Abkürzungen (wie auch VMS). Nachdem ich die Online-Hilfe gelesen hatte, tippte ich
sta
und überlegte, ob ich sie bekommen sollte status
. Das war die Abkürzung für start
und nachdem der Befehlsinterpreter nichts zum Starten gegeben hatte , meldete er mich ab.
- Das X-Toolkit (von xterm verwendet ) ermöglicht abgekürzte Optionen. Um dies effektiv in xterm zu nutzen, müssen die Befehlsparameter vorverarbeitet werden, um
-v
(für die Version) den Vorzug zu geben -vb
(visuelle Glocke). Das X-Toolkit bietet keine direkte Möglichkeit, eine bevorzugte Option anzugeben, wenn Unklarheiten bestehen.
Aufgrund dieses Zweideutigkeitspotenzials ziehen es einige Entwickler vor, Abkürzungen nicht zuzulassen. Lynx verwendet beispielsweise Optionen mit mehreren Zeichen, ohne Abkürzungen zuzulassen.
Nicht alle Programme verwendet getopt
: tar
und ps
nicht. Auch nicht rcs
(oder sccs
), wie Sie sehen können, wenn Sie notieren, wo der Bindestrich optional und die Optionswerte optional waren.
In Anbetracht dessen haben die GNU-Entwickler die in anderen Systemen verwendeten Schlüsselwortoptionen angepasst, indem sie erweitert haben getopt
, um eine lange Version jeder kurzen Option bereitzustellen. Zum Beispiel sagt 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.
Die Änderung in fileutils war früher:
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.
und vielleicht findet jemand einen noch früher, aber es scheint, dass der Datei-Header das früheste Datum anzeigt:
/* Getopt for GNU.
Copyright (C) 1987, 1989 Free Software Foundation, Inc.
Das ist (zum Beispiel) gleichzeitig mit dem X Toolkit (1987). Die meisten Unix-Dienstprogramme, mit denen Sie vertraut sind (z. B. ls
, ps
), verwendeten die vorhandenen Optionen für einzelne Zeichen, die regelmäßige Besuche im Handbuch erfordern. Bei der Einführung getopt_long
haben die GNU-Entwickler dies nicht getan, indem sie zuerst neue Optionen hinzugefügt haben. sie begann durch die vorhandenen Optionen Tabelliermaschinen und eine passende lange Option bietet.
Weil sie das Hinzufügen zu einem bestehenden Repertoire gab es (wieder) das Problem des Konflikts mit dem bestehenden Optionen. Um dies zu vermeiden, haben sie die Syntax mit zwei Bindestrichen vor langen Optionen geändert.
Diese Programme getopt_long
werden aus den üblichen Gründen weiterhin auf diese Weise verwendet:
- Skripte hängen von den Optionen ab; Entwickler sind nicht bestrebt, Skripte zu brechen
- Es gibt einen schriftlichen Kodierungsstandard (der möglicherweise effektiv ist)
- Niemand hat sich ein konkurrierendes Tool-Set ausgedacht, das ausgesprochen inkompatibel ist (sowohl BSDs als auch GNU-Entwickler kopieren Optionsnamen voneinander).
-
wird technisch als Bindestrich bezeichnet . Wir verwenden das Wort "Bindestrich", um in den meisten Fällen auf den Bindestrich (-) und manchmal auf den Bindestrich (-) zu verweisen, aber keiner von beiden ist ein Bindestrich (-).