Verwirrung über die Änderung der Bedeutung von Argumenten und Optionen. Gibt es eine offizielle Standarddefinition?

11

Ich stieß auf eine verwirrende Variation im Verständnis der Optionen und Argumente in Bezug auf die Syntax von Befehlen.

Zum Beispiel stieß ich auf Definitionen wie:

  • command -a -b -c d e f

    Einige unterscheiden sich zwischen -a -b -cOptionen oder Schaltern und d e fdem Aufrufen von Argumenten.

  • command -a -b -c d e f

    Einige, zum Beispiel ein bashHandbuch, rufen alle -a -b -c d e fArgumente auf und erklären, dass alle über ein Skript von $1 $2 $3 $4 $5 $6jeweils zugänglich sind.

  • command -a b=c

    Einige nennen -aeine Option, bein Argument und cden Wert, andere mischen sie wie in den ersten beiden Punkten in einer Variante, die alle -a b cArgumente aufruft .

Diese drei Versionen sind nur Beispiele für eine Vielzahl verschiedener aufrufender Sorten. Ich weiß nicht einmal, wie ich sie alle auflisten soll, aber ich habe festgestellt, dass es mit Sicherheit keine feste Namenskonvention gibt.

Zumindest gibt es keine standardisierte Namenskonvention, die ich kenne, weil ich auf verschiedene zufällige Quellen gestoßen bin, aber selbst bei offiziellen Linux- und GNU-verbundenen Websites oder Handbüchern konnte ich diese Inkonsistenz feststellen.

Gibt es ein unbestreitbares offizielles Namensschema, auf das ich mich beziehen kann?

Hai
quelle
Die zweite Form ist aus eigener Sicht 100% korrekt. Der Kontext ist sehr wichtig.
Oskar Skog

Antworten:

18

Angepasst an den Abschnitt "Utility Argument Syntax" des POSIX-Standards :

utility_name [-a] [-b] [-c option_argument]
             [-d|-e] [-f[option_argument]] [operand...]

Das Dienstprogramm im Beispiel heißt utility_name. Es folgen Optionen , Optionsargumente und Operanden .

Die Argumente, die aus -Zeichen und einzelnen Buchstaben oder Ziffern bestehen a, werden als Optionen (oder historisch gesehen als Flags ) bezeichnet. Auf bestimmte Optionen folgt ein Optionsargument , wie mit gezeigt [-c option_argument]. Die Argumente nach den letzten Optionen und Optionsargumenten werden als Operanden bezeichnet .

Der Standard definiert auch "Argument" als

In der Shell-Befehlssprache wird ein Parameter an ein Dienstprogramm übergeben, der einer einzelnen Zeichenfolge in dem argvvon einer der execFunktionen erstellten Array entspricht. Ein Argument ist eine der Optionen, Optionsargumente oder Operanden nach dem Befehlsnamen.


Alle Dinge nach dem utility_namein der Befehlszeile sind die Argumente des Dienstprogramms , und sie werden alle in den Positionsparametern angezeigt, wenn es sich um ein Shell-Skript handelt. Die Begriffe Option, Optionsargument und Operand sind spezifischere Namen für diese Argumente in der Befehlszeile.

"Flag" und "switch" sind gebräuchliche Synonyme für "option".

Im Falle des

utility -a b=c
  • -aund b=csind Argumente,
  • -aist eine Option, wenn das Dienstprogramm sie als solche erkennt (das lnDienstprogramm hat keine -xOption, -xist also lnstreng genommen keine Option und ln -xwürde eine Diagnosemeldung auslösen).
  • b=cist ein Optionsargument, wenn die -aOption ein Argument akzeptiert, andernfalls ist es ein Operand,
  • bund csind keine Optionen, Optionsargumente und keine Operanden an sich.

Wie Sie meinem obigen Text entnehmen können, wäre es einfacher gewesen, anhand der Zusammenfassung eines Dienstprogramms (wie im Handbuch des Dienstprogramms angegeben) zu arbeiten, als zu versuchen, einen in der Befehlszeile eingegebenen generischen Befehl zu dekodieren. Im Handbuch wird klar angegeben, welche Optionen Optionsargumente annehmen und welche Argumente Operanden usw. sind.

So rufen Sie ceinen „Wert“ ist IMHO vollkommen ok. Es ist nicht standardisiert, aber nur sehr wenige würden Sie missverstehen, wenn Sie sagen, " cist der Wert, dem gegeben wirdb ". Dies ergibt sich aus dem Kontext des betreffenden Dienstprogramms.

Beispielsweise

$ awk -v var="d" '...' data.in

Jeder, der davon weiß, awkwürde sagen, dass -v var="d"" der awkVariablen varder Wert din der Befehlszeile zugewiesen wird ".

Kusalananda
quelle