ls -a
(Considero-a
una opción)sudo -u username
(-u
= opción,username
= arg)chmod 664 my-dir
(664
= opción,my-dir
= arg)
No puedo pensar en un ejemplo que pueda decir "esto es una bandera", excepto quizás cuando se mira en la lista de directorios:
-r--------. 1 david david 3344 May 19 17:48 611056.pdf
Esto tiene el "indicador de lectura" establecido para el propietario, pero eso es todo. ¿Qué me impide llamar a eso una "opción de lectura"?
Escribo y edito documentación técnica, principalmente en DocBook XML, y estoy buscando una explicación de la diferencia, que sea lo más consistente y precisa posible. Sin embargo, ya veo que se forma un patrón:
- Las banderas tienden a ser booleanas. p.ej,
setenforce 0
- Las opciones ayudan a definir cómo debe comportarse un comando. Algunos pueden ser opcionales.
- Los argumentos le dicen a los comandos sobre qué objeto operar.
Pude verme combinando banderas y opciones (algunas opciones pueden tener una docena de valores posibles, pero los booleanos solo tienen dos). Los argumentos parecen suficientemente diferentes para mantenerlos como tales.
ls -a
ejemplo. (Para mí, una bandera es una variable booleana.)tar c abc.txt > x.tar
hayc
una función . Estás tratando de llamar a eso una opción y eso es completamente inapropiado.Respuestas:
No existen definiciones consistentes de los términos "opción", "argumento" e "indicador", y no existe una autoridad central dentro del mundo del desarrollo de software que pueda imponer su uso. Esto sucede con mucha terminología: después de más de 30 años de usar la palabra "directorio", ahora tengo que tratar con personas que usan la palabra "carpeta" que han sido confundidas por el nuevo discurso de Microsoft.
Hay diferentes formas en que las definiciones consensuadas de términos pueden surgir en la programación. En el caso de "argumento" / "opción" / "bandera", los manuales y tutoriales canónicos para lenguajes de programación han ayudado a imponer el uso, al igual que los términos utilizados en bibliotecas comunes.
Por ejemplo, las cosas que coloca en la línea de comando después de un comando a menudo se denominan "argumentos" al comando, por analogía con los argumentos de una llamada a función , y esto probablemente se deba en parte a que se llaman "argumentos" en el manual de C ( por lo tanto
argc
yargv
). Laargparse
biblioteca de Python también ayuda a aplicar el término "argumento". Sin embargo, también he visto que se llaman "parámetros".El término "opción" se deriva de "opcional", lo que implica que pueden omitirse. La
getopt
biblioteca C es un uso de este término. Pero existe un precedente para las "opciones" que en realidad no son opcionales: por ejemplo, elargparse
manual establece que uno puede crear una "opción requerida" (aunque también dice que esto "generalmente se considera mala forma"). Las opciones suelen ir precedidas de un guión simple (-
) o doble (--
opción larga), pero hay comandos bien conocidos que no requieren ni imponen el uso del guión para las opciones (p. Ejtar
.ps
, Ydd
). Una opción puede en sí tener un argumento (por ejemplo,-w80
e--color=always
), o en ocasiones múltiples argumentos.Las "banderas" son, en mi experiencia, lo mismo que las opciones, pero generalmente no toman argumentos en sí mismos y esencialmente representan interruptores de encendido y apagado booleanos.
En una nota más amplia, dado que cada programador tiene la opción de intentar buscar alguna forma estándar de hacer cosas y nombrar cosas, pero también puede reinventar la rueda sin un costo adicional, nombrar nunca será coherente. Y una vez que haya documentado su código, y quede claro qué nuevo significado le ha dado a estas palabras al dar ejemplos, esos nombres y significados podrían quedarse si hay suficientes personas que los recogen de su código.
fuente
Una bandera es un tipo de opción, una opción de tipo booleano, y siempre es falsa por defecto (por ejemplo, --verbose, --quiet, --all, --long, etc.).
Una opción le dice a la función cómo actuar (por ejemplo, -a, -l, --verbose, --output, -name, -c, etc.), mientras que un argumento le dice a la función sobre qué actuar / desde (por ejemplo
*
, file1, nombre de host, base de datos).fuente
git pull git://bla/bla
, elpull
es un argumento que dice engit
qué trabajar.pull
es un comando Uno puede pensar en los comandos como extensiones del nombre de la aplicación: git pull <...> es equivalente a una aplicación llamadagit-pull
. Cuando la aplicación tiene comandos, cada comando hace que la aplicación haga algo completamente diferente.tar
, por ejemplo , usarc
para crear se llama función . Y ese es exactamente el problema: no hay una estandarización de los términos, incluso si parece que crees que hay una respuesta