Confusión sobre el cambio de significado de los argumentos y las opciones, ¿existe una definición estándar oficial?

11

Encontré una variación confusa en la comprensión de las opciones y argumentos con respecto a la sintaxis de los comandos.

Por ejemplo, encontré definiciones como:

  • command -a -b -c d e f

    algunos difieren entre -a -b -c, llámelos opciones o conmutadores y d e fllamándolos argumentos.

  • command -a -b -c d e f

    algunos, por ejemplo, un bashmanual, llaman a todos los -a -b -c d e fargumentos y explican que se puede acceder a todos ellos desde un script $1 $2 $3 $4 $5 $6respectivamente.

  • command -a b=c

    algunos llaman -auna opción, bun argumento y cel valor, pero otros los mezclan como en los primeros dos puntos, en una variedad que llama a todos los -a b cargumentos.

Esas tres versiones son solo ejemplos de una gran variedad de diferentes variedades de llamadas, ni siquiera sé cómo enumerarlas todas, pero noté que, con seguridad, no hay una convención de nomenclatura fija.

O al menos, no conozco ninguna convención de nomenclatura estandarizada, porque encontré diferentes fuentes aleatorias, pero incluso entre los sitios o manuales oficiales afiliados a Linux y GNU pude encontrar esta inconsistencia.

¿Existe un esquema de denominación oficial incuestionable al que me pueda referir?

Sharkant
fuente
La segunda forma es 100% correcta desde su propio punto de vista. El contexto es muy importante.
Oskar Skog

Respuestas:

18

Adaptado de la sección "Sintaxis de argumento de utilidad" del estándar POSIX :

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

La utilidad en el ejemplo se llama utility_name. Le siguen opciones , argumentos de opción y operandos .

Los argumentos que consisten en -caracteres y letras simples o dígitos, como a, se conocen como opciones (o, históricamente, banderas ). Ciertas opciones van seguidas de un argumento de opción , como se muestra con [-c option_argument]. Los argumentos que siguen a las últimas opciones y argumentos de opción se denominan operandos .

El estándar también define "argumento" como

En el lenguaje de comandos de shell, un parámetro pasado a una utilidad como el equivalente de una sola cadena en la argvmatriz creada por una de las execfunciones. Un argumento es una de las opciones, argumentos de opción u operandos que siguen al nombre del comando.


Todas las cosas después utility_namede la línea de comando son los argumentos de la utilidad , y todos se muestran en los parámetros posicionales si se trata de un script de shell. Los términos opción, argumento-opción y operando son nombres más específicos para estos argumentos en la línea de comando.

"Marcar" y "cambiar" son sinónimos comunes de "opción".

En el caso de

utility -a b=c
  • -ay b=cson argumentos,
  • -aes una opción si la utilidad la reconoce como tal (la lnutilidad no tiene -xopción, por -xlo que no es una opción lnestrictamente hablando y ln -xactivaría un mensaje de diagnóstico),
  • b=ces un argumento de opción si la -aopción toma un argumento, de lo contrario es un operando,
  • by noc son opciones, argumentos de opción y no operandos en sí mismos.

Como notará en mi texto anterior, trabajar desde la sinopsis de una utilidad (como se indica en el manual de la utilidad) hubiera sido más fácil que tratar de decodificar un comando genérico escrito en la línea de comando. El manual indicará claramente qué opciones toman argumentos de opción y qué argumentos son operandos, etc.

Llamar a cun "valor" está en mi humilde opinión perfectamente bien. No es algo estandarizado, pero muy pocos lo malinterpretarían si dijera " ces el valor dado ab ". Sería claro por el contexto de la utilidad en cuestión.

Por ejemplo

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

Cualquiera que conozca awkdiría que -v var="d"significa "a la awkvariable varse le asigna el valor den la línea de comando ".

Kusalananda
fuente