Quelles sont les différences entre ces termes: "option", "argument" et "paramètre"? Dans les pages de manuel, ces termes semblent souvent être utilisés de manière interchangeable.
Une commande est divisée en un tableau de chaînes nommé arguments. L'argument 0 est (normalement) le nom de la commande, l'argument 1, le premier élément suivant la commande, etc.
$ ls -la /tmp /var/tmp
arg0 = ls
arg1 = -la
arg2 = /tmp
arg3 = /var/tmp
Un option est un type documenté d'argument modifiant le comportement d'une commande , par exemple -l
signifie généralement "long", -v
verbeux. -lv
sont deux options combinées dans un seul argument . Il existe également de longues options comme --verbose
. Comme leur nom l'indique, les options sont généralement facultatives. Il existe cependant certaines commandes avec des "options obligatoires" paradoxales.
$ ls -la /tmp /var/tmp
option1= -l
option2= -a
Un paramètre est un argument qui fournit des informations à la commande ou à l'une de ses options , par exemple dans -o file
, fichier est le paramètre du -o
option. Contrairement aux options, dont les valeurs possibles sont codées en dur dans les programmes, les paramètres ne le sont généralement pas, donc l'utilisateur est libre d'utiliser la chaîne qui convient à ses besoins. Si vous devez passer un paramètre qui ressemble à une option mais ne doit pas être interprété comme tel, vous pouvez le séparer du début de la ligne de commande par un double tiret: --
.
$ ls -la /tmp /var/tmp
parameter1= /tmp
parameter2= /var/tmp
$ ls -l -- -a
option1 = -l
parameter1 = -a
Enfin, il existe sous-commandes, également appelées fonctions/(bas niveau), qui sont utilisées avec des "métacommandes" qui incorporent plusieurs commandes distinctes, comme busybox
, git
, apt-get
, openssl
et autres. Avec eux, vous pouvez avoir des options globales précédant la sous-commande et des options spécifiques à la sous-commande qui suivent la sous-commande. Contrairement aux paramètres, la liste des sous-commandes possibles est codée en dur dans la commande elle-même. par exemple.:
$ 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
Notez que certaines commandes comme test
, tar
, dd
et find
ont une syntaxe d'analyse d'arguments plus complexe que celles décrites précédemment et peuvent avoir tout ou partie de leurs arguments analysés comme expressions
, operands
, keys
et des composants spécifiques de commandes similaires.
La page man
pour une commande Unix typique utilise souvent les termes argument
, option
et parameter
. Au niveau le plus bas, nous avons argument
et tout est un argument, y compris le (chemin du système de fichiers vers) la commande elle-même.
Dans un script Shell, vous accédez aux arguments à l'aide des variables spéciales $0
.. $n
. D'autres langues ont des moyens similaires d'y accéder (généralement via un tableau avec un nom comme argv
).
Les arguments peuvent être interprétés comme options si vous le souhaitez. La façon dont cela est fait est propre à l'implémentation. Vous pouvez soit lancer le vôtre, par exemple un script Shell (tel que bash
) peut utiliser les commandes getopts
ou getopt
fournies.
Ceux-ci définissent généralement un option comme argument commençant par un trait d'union (-
) et certaines options peuvent utiliser des arguments de procédure comme paramètres. Des analyseurs plus performants (par exemple getopt
) prennent en charge le mélange de formes courtes (-h
) et longue (--help
) options.
En règle générale, la plupart des options prennent zéro ou un paramètre. Ces paramètres sont aussi parfois appelés valeurs.
Les options prises en charge sont codées dans le code du programme (par exemple dans l'appel de getopts
dans un script Shell). Tous les arguments restants après que les options ont été consommées sont communément appelés paramètres de position lorsque l'ordre dans lequel ils sont donnés est significatif (ceci contraste avec les options qui peuvent généralement être données dans n'importe quel ordre).
Encore une fois, le script définit les paramètres de position en fonction de la façon dont il les consomme et les utilise.
Donc, une commande typique
$ ls -I README -l foo 'bar car' baz
a sept arguments: /usr/bin/ls
, -I
, README
, -l
, foo
, bar car
et baz
accessibles en tant que $0
à $6
. Le -l
et -I
sont interprétés comme options, ce dernier ayant un paramètre (ou valeur) de README
. Ce qui reste sont paramètres de position (foo
, bar car
et baz
).
L'analyse des options peut modifier la liste des arguments en supprimant ceux qu'elle consomme (par exemple en utilisant shift
ou set
) de sorte que seuls les paramètres de position restent et sont ensuite accessibles en tant que $1
.. $n
.