Für viele Zwecke sind die GNU getopt()
und getopt_long()
Funktionen eine gute Wahl. Die GNU getopt()
ist für einbuchstabige Optionsargumente gedacht und nähert sich dem POSIX-Standardverhalten ziemlich genau an. Sie kann dazu gebracht werden, sich orthodoxer zu verhalten, indem sie die Umgebungsvariable POSIXLY_CORRECT setzt. Der Unterschied besteht darin, dass GNU Optionsargumente nach dem ersten Nicht-Optionsargument erkennt und die Argumente so permutiert, dass alle Optionsargumente vor einem der Nicht-Optionsargumente verarbeitet werden. Das ist manchmal wichtig - obwohl die Kontexte dazu neigen, ein wenig esoterisch zu sein. Es gibt ein paar andere zusätzliche Tricks zur Verfügung.
Die GNU getopt_long()
ist der beste Mechanismus für den Umgang mit langen Optionen wie --help
. Es kann mit optionalen Argumenten, passenden Ein-Buchstaben-Optionen und allen möglichen Dingen umgehen.
Es gibt zahlreiche andere Pakete, die Optionen auf verschiedene Arten handhaben.
(Perl hat eine Fülle von Getopt Module, was, wie viel Aufwand wurde im Laufe der Jahre setzen in.)
Sie könnten einige nützliche zusätzliche Informationen zu What is the general syntax of a Unix shell command finden. Sie können auch die POSIX-Spezifikation für Befehlszeilenkonventionen im Kapitel Utility Conventions lesen.
Stimmen Sie mich für "rollen Sie Ihre eigenen." a) Sie lernen daraus, b) es macht Spaß und c) Sie müssen sich keine Gedanken über die Portabilität oder den Code anderer machen, und d) Sie wissen, dass Sie alle Funktionen haben, die Sie wollen, und keine diejenigen, die du nicht tust. Ich denke jedoch, dass ich in der Minderheit sein werde. –
@Chris Lutz: es sei denn, Sie rollen Ihre eigenen, so dass es sehr nah am Standard hält, dann sind Sie in Gefahr, Programme zu produzieren, die irritierend zu verwenden sind. Die Verwendung eines Standardoptionsparsers reduziert das Lernen für alle anderen (die Ihr Programm verwenden) und vereinfacht normalerweise auch die Wartung. –
Ich gerade erst ausgerollt https://github.com/visionmedia/commander.ca port-ish meiner Ruby und Node Option Parser –