Was sind die Unterschiede zwischen diesen Begriffen: "Option", "Argument" und "Parameter"? In Manpages scheinen diese Begriffe oft synonym verwendet zu werden.
Was sind die Unterschiede zwischen diesen Begriffen: "Option", "Argument" und "Parameter"? In Manpages scheinen diese Begriffe oft synonym verwendet zu werden.
Antworten:
Ein Befehl ist in ein Array von Zeichenfolgen mit dem Namen Argumente unterteilt . Argument 0 ist (normalerweise) der Befehlsname, Argument 1, das erste Element nach dem Befehl usw. Diese Argumente werden manchmal als Positionsparameter bezeichnet .
$ ls -la /tmp /var/tmp
arg0 = ls
arg1 = -la
arg2 = /tmp
arg3 = /var/tmp
Eine Option ist ein dokumentierter Argumenttyp, der das Verhalten eines Befehls ändert , z. B. -l
häufig "lang", -v
ausführlich. -lv
sind zwei Optionen, die in einem einzigen Argument zusammengefasst sind. Es gibt auch lange Optionen wie --verbose
(siehe auch Verwenden von getopts zum Verarbeiten langer und kurzer Befehlszeilenoptionen ). Wie der Name schon sagt, sind Optionen normalerweise optional. Es gibt jedoch einige Befehle mit paradoxen "obligatorischen Optionen".
$ ls -la /tmp /var/tmp
option1= -l
option2= -a
Ein Parameter ist ein Argument, das Informationen entweder zum Befehl oder zu einer seiner Optionen bereitstellt , z. B. in -o file
, Datei ist der Parameter der -o
Option. Im Gegensatz zu Optionen, deren mögliche Werte in Programmen fest codiert sind, sind dies normalerweise keine Parameter, sodass der Benutzer die Zeichenfolge verwenden kann, die seinen Anforderungen entspricht. Wenn Sie einen Parameter übergeben müssen, der wie eine Option aussieht, aber nicht als solcher interpretiert werden sollte, können Sie ihn mit einem doppelten Bindestrich vom Anfang der Befehlszeile trennen : --
.
$ ls -la /tmp /var/tmp
parameter1= /tmp
parameter2= /var/tmp
$ ls -l -- -a
option1 = -l
parameter1 = -a
Ein Shell-Parameter ist alles, was einen Wert im Kontext der Shell speichert. Dazu gehören Positionsparameter (zB $1
, $2
...), Variablen (zB $foo
, $bar
...) und Sonderzeichen diejenigen (zB $@
)
Schließlich gibt es Unterbefehlen , die auch als Funktionen / (low-level) Befehle bekannt, die mit „Metacommands“ verwendet werden , die mehrere separate Befehle einzubetten, wie busybox
, git
, apt-get
, openssl
, und Ähnliches. Mit ihnen haben Sie möglicherweise globale Optionen vor dem Unterbefehl und unterbefehlsspezifische Optionen, die dem Unterbefehl folgen. Im Gegensatz zu Parametern ist die Liste der möglichen Unterbefehle im Befehl selbst fest codiert. z.B:
$ busybox ls -l
command = busybox
subcommand = ls
subcommand option1 = -l
$ git --git-dir=a.git --work-tree=b -C c status -s
command = git
command option1 = --git-dir=a.git
command option2 = --work-tree=b
command option3 = -C
subcommand = status
subcommand option1 = -s
Beachten Sie, dass einige Befehle wie test
, tar
, dd
und find
haben kompliziertere Argument Parsen Syntax als die , die zuvor beschrieben und kann einige oder alle ihre Argumente haben geparst wie expressions
, operands
, keys
und ähnlichen Befehl spezifische Komponenten.
Beachten Sie auch, dass optionale Variablenzuweisungen und -umleitungen, obwohl sie von der Shell für Tilde-Erweiterung, Parametererweiterung, Befehlssubstitution, arithmetische Erweiterung und Anführungszeichenentfernung wie andere Befehlszeilenparameter verarbeitet werden, in meiner Antwort nicht berücksichtigt werden, da sie verschwunden sind, wenn die Befehl wird tatsächlich aufgerufen und seine Argumente übergeben.
VARNAME="VALUE"
Syntax erstellen . Wenn nicht (dh VARNAME ist kein Parameter), warum gilt das Konzept der Parametererweiterung dann auch für fest codierte Variablen?
Die man
Seite für einen typischen Unix - Befehl verwendet häufig die Begriffe argument
, option
und parameter
. Auf der untersten Ebene haben wir argument
und alles ist ein Argument, einschließlich des Befehls (Dateisystempfad zum) selbst.
In einem Shell - Skript zugreifen Sie Argumente der speziellen Variablen $0
.. $n
. Andere Sprachen haben ähnliche Möglichkeiten, auf sie zuzugreifen (üblicherweise über ein Array mit einem Namen wie argv
).
Argumente können auf Wunsch als Optionen interpretiert werden . Wie dies gemacht wird, ist implementierungsspezifisch. Sie können entweder Ihre eigenen rollen, zum Beispiel kann ein Shell- bash
Skript (wie z. B. ) ein bereitgestelltes Skript getopts
oder getopt
Befehle verwenden.
Diese definieren normalerweise eine Option als Argument, das mit einem Bindestrich ( -
) beginnt, und einige Optionen verwenden möglicherweise fortlaufende Argumente als Parameter. Leistungsfähigere Parser (z. B. getopt
) unterstützen das Mischen von Optionen für Kurzform ( -h
) und Langform ( --help
).
Normalerweise nehmen die meisten Optionen null oder einen Parameter an. Solche Parameter werden manchmal auch als Werte bezeichnet .
Die unterstützten Optionen sind im Programmcode codiert (z. B. beim Aufruf getopts
eines Shell-Skripts). Alle verbleibenden Argumente, nachdem die Optionen verbraucht wurden, werden üblicherweise als Positionsparameter bezeichnet, wenn die Reihenfolge, in der sie angegeben werden, signifikant ist (dies steht im Gegensatz zu Optionen, die normalerweise in beliebiger Reihenfolge angegeben werden können).
Auch hier definiert das Skript die Positionsparameter, indem es sie verwendet und verwendet.
Also ein typischer Befehl
$ ls -I README -l foo 'bar car' baz
sieben Argumente hat: /usr/bin/ls
, -I
, README
, -l
, foo
, bar car
, und baz
zugänglich wie $0
durch $6
. Die -l
und -I
werden als Optionen interpretiert , wobei letztere einen Parameter (oder Wert ) von haben README
. Was bleibt, sind Positionsparameter ( foo
, bar car
und baz
).
Durch das Parsen von Optionen kann die Argumentliste geändert werden, indem die verwendeten Elemente entfernt werden (z. B. mit shift
oder set
), sodass nur die Positionsparameter übrig bleiben und danach als $1
... zugänglich sind $n
.
Da die Frage mit "bash" gekennzeichnet ist, habe ich im Bash-Handbuch nach relevanten Abschnitten gesucht . Ich liste diese unten als zitierte Passagen zusammen mit meinen eigenen Zusammenfassungen mit einem Satz auf.
Alles, was dem Befehl folgt, ist ein Argument.
Ein einfacher Shell-Befehl
echo a b c
besteht beispielsweise aus dem Befehl selbst, gefolgt von Argumenten, die durch Leerzeichen getrennt sind.Ein einfacher Befehl ist die Art von Befehl, die am häufigsten vorkommt. Es ist nur eine Folge von Wörtern, die durch Leerzeichen getrennt sind und von einem der Steueroperatoren der Shell abgeschlossen werden (siehe Definitionen). Das erste Wort gibt im Allgemeinen einen auszuführenden Befehl an, wobei der Rest der Wörter die Argumente dieses Befehls sind.
Argumente werden während der Funktionsausführung als Parameter bezeichnet.
Wenn eine Funktion ausgeführt wird, werden die Argumente für die Funktion während ihrer Ausführung zu den Positionsparametern
Ein Parameter ist eine Entität, die Werte speichert. Dies kann ein Name, eine Nummer oder eines der unten aufgeführten Sonderzeichen sein. Eine Variable ist ein Parameter, der durch einen Namen gekennzeichnet ist.
Ein Positionsparameter ist ein Parameter, der mit einer oder mehreren Ziffern außer der einstelligen 0 gekennzeichnet ist. Positionsparameter werden beim Aufrufen aus den Argumenten der Shell zugewiesen und können mit dem Befehl set builtin neu zugewiesen werden. Der Positionsparameter N kann als $ {N} oder als $ N bezeichnet werden, wenn N aus einer einzelnen Ziffer besteht.
Es gibt keinen eigenen Abschnitt zum Definieren einer Option, sie werden jedoch im gesamten Handbuch als Zeichen mit Bindestrich vorangestellt.
Die Option -p ändert das Ausgabeformat in das von POSIX angegebene Format
argv
Array übergeben werden, das als Argument für einenexecv
Syscall im Stil angegeben wird, ohne dass eine Shell beteiligt ist.