Warum haben Optionen mit langen Zeichenfolgen einen doppelten Strich?

374
HeavenlyHarmony

Diese Frage wurde vielleicht schon früher gestellt ...

Warum haben Flags wie --recursive zwei Striche anstatt nur -recursive? Ich weiß, dass die gekürzte Version nur -r ist. Gibt es eine maximale Anzahl von Zeichen, die eine Flagge mit einem Bindestrich enthalten kann, bevor zwei Bindestriche erforderlich sind?

1
Dies kann hilfreich sein: https://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html auch dies: http://leo.ugr.es/elvira/devel/Tutorial/Java/essential /attributes/_posix.html Frank Thomas vor 5 Jahren 1

2 Antworten auf die Frage

2
Scott

Das Problem ist, dass Sie Dinge wie sagen können ls -laR; es ist äquivalent zu ls -l -a -R. Also -recursivewürde als interpretiert -r -e -c -u -r -s -i -v -e.

Er wird auch verwendet, um lange Argumente zuzulassen und um Argumente ohne Verwirrung an eine Option zu übergeben. Frank Thomas vor 5 Jahren 0
1
Alex

Es gibt keine exakte Regel, um einen einfachen oder doppelten Bindestrich als Option für ein Programm zu verwenden. Wenn man sich dafür entschieden hat, Optionen alleine zu handhaben, kann man alles umsetzen, was man will. Wenn der Programmierer jedoch nicht nach einem PITA sucht und möchte, dass das Programm eine allgemein bekannte, gut erkennbare Methode verwendet, würden Standardfunktionen verwendet getopt/getopt_long, die lange Optionen (lange Zeichenfolge, wie Sie gefragt haben) als doppelte gestrichelte Optionen (Einzelzeichen) behandeln ) mit einem einfachen Bindestrich vorangestellt. Die Funktion getoptist Teil von <unistd.h>C. Dieselbe Funktion kann auf Unix-basierten Systemen in Standard-Shells verwendet werden man getopt 1, die die Analyse von einfachen und doppelt gestrichelten (langen) Optionen verwenden.

Gibt es eine maximale Anzahl von Zeichen, die eine Flagge mit einem Bindestrich enthalten kann, bevor zwei Bindestriche erforderlich sind?

Wenn man die oben beschriebene Funktion verwendet, können kurze Optionen nur ein einziges Zeichen enthalten.