with script positional example bash shell parameters arguments option

bash - script - Diferencia entre términos: “opción”, “argumento” y “parámetro”?



positional parameters bash (2)

La página man para un comando típico de Unix a menudo usa los términos argument , option y parameter . En el nivel más bajo, tenemos argument y todo es un argumento, incluido el propio comando (ruta del sistema de archivos a).

En un script de shell, accede a los argumentos utilizando las variables especiales $0 .. $n . Otros idiomas tienen formas similares de acceder a ellos (generalmente a través de una matriz con un nombre como argv ).

Los argumentos pueden interpretarse como opciones si lo desea. Cómo se hace esto es específico de la implementación. Puede rodar el suyo propio, por ejemplo, un script de shell (como bash ) puede usar los comandos getopts u getopt proporcionados.

Estos suelen definir una opción como un argumento que comienza con un guión ( - ) y algunas opciones pueden usar argumentos de procedencia como sus parámetros. Los analizadores más capaces (por ejemplo, getopt ) admiten la --help opciones de formato corto ( -h ) y largo ( --help ).

Normalmente, la mayoría de las opciones toman cero o un parámetro. Tales parámetros también se llaman a veces valores .

Las opciones admitidas están codificadas en el código del programa (por ejemplo, en la invocación de getopts dentro de un script de shell). Los argumentos restantes después de que se hayan consumido las opciones se denominan comúnmente parámetros posicionales cuando el orden en que se dan es significativo (esto contrasta con las opciones que generalmente se pueden dar en cualquier orden).

Una vez más, el script define cuáles son los parámetros posicionales según cómo los consume y cómo los usa.

Así que un comando típico

$ ls -I README -l foo ''bar car'' baz

tiene siete argumentos: /usr/bin/ls , -I , README , -l , foo , bar car y baz accesibles desde $0 hasta $6 . El -l y el -I se interpretan como opciones , este último tiene un parámetro (o valor ) de README . Lo que queda son parámetros posicionales ( foo , bar car y baz ).

El análisis de opciones puede alterar la lista de argumentos al eliminar aquellos que consume (p. Ej., Usar shift o set ) para que solo queden los parámetros de posición y, por lo tanto, se pueda acceder a ellos como $1 .. $n .

¿Cuáles son las diferencias entre estos términos: "opción", "argumento" y "parámetro"? En las páginas de manual, estos términos a menudo parecen ser usados ​​indistintamente.


Un comando se divide en una matriz de cadenas llamadas argumentos . El argumento 0 es (normalmente) el nombre del comando, el argumento 1, el primer elemento que sigue al comando, y así sucesivamente.

$ ls -la /tmp /var/tmp arg0 = ls arg1 = -la arg2 = /tmp arg3 = /var/tmp

Una opción es un tipo de argumento documentado que modifica el comportamiento de un comando , por ejemplo, -l comúnmente significa "largo", -v detallado. -lv son dos opciones combinadas en un solo argumento. También hay opciones largas como --verbose . Como su nombre lo sugiere, las opciones suelen ser opcionales. Sin embargo, hay algunos comandos con "opciones obligatorias" paradójicas.

$ ls -la /tmp /var/tmp option1= -l option2= -a

Un parámetro es un argumento que proporciona información al comando o a una de sus opciones , por ejemplo, en el -o file , el archivo es el parámetro de la opción -o . A diferencia de las opciones, cuyos posibles valores están codificados de forma rígida en los programas, los parámetros generalmente no lo son, por lo que el usuario es libre de usar cualquier cadena que se adapte a sus necesidades. Si necesita pasar un parámetro que se parece a una opción pero no debe interpretarse como tal, puede separarlo desde el principio de la línea de comando con un doble guión: -- .

$ ls -la /tmp /var/tmp parameter1= /tmp parameter2= /var/tmp $ ls -l -- -a option1 = -l parameter1 = -a

Finalmente, hay subcomandos , también conocidos como funciones / comandos (de bajo nivel), que se usan con "metacommandos" que incorporan varios comandos separados, como busybox , git , apt-get , openssl , y similares. Con ellos, podría tener opciones globales que preceden al subcomando, y opciones específicas del subcomando que siguen al subcomando. A diferencia de los parámetros, la lista de posibles subcomandos está codificada en el propio comando. p.ej:

$ 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

Tenga en cuenta que algunos comandos como test , tar , dd y find tienen una sintaxis de análisis de argumentos más compleja que los descritos anteriormente y pueden analizar algunos o todos sus argumentos como expressions , operands , keys y componentes similares de comandos similares.