¿De dónde vino la convención de usar guiones simples para letras y guiones dobles para palabras y por qué se sigue usando?
Por ejemplo, si escribo ls --help
, ves:
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author with -l, print the author of each file
-b, --escape print octal escapes for nongraphic characters
--block-size=SIZE use SIZE-byte blocks
-B, --ignore-backups do not list implied entries ending with ~
...
Intenté buscar en Google - and -- convention
incluso con citas con poco éxito.
command-line
history
options
Larry
fuente
fuente
-
técnicamente se llama guión . Usamos la palabra "guión" para referirnos al guión em (-) en la mayoría de los casos, y a veces al guión en (-), pero ninguno de los cuales es un guión (-).java -version
find . -delete
-ab
que activa tantoa
yb
. Sin el doble guión,-help
activaría losh
,e
,l
, yp
opciones.Respuestas:
En The Art of Unix Programming, Eric Steven Raymond describe cómo evolucionó esta práctica:
[1] http://www.faqs.org/docs/artu/ch10s05.html
fuente
Una razón para continuar usando las opciones de una sola letra es porque se pueden unir:
ls -ltr
es mucho más fácil de escribir quels --sort=time --reverse --format=long
. Hay varias veces que ambos son buenos para usar. En cuanto a la búsqueda de este tema, intente con la "convención de opciones de línea de comandos de Unix".fuente
ls --sort=time --reverse --format=long
tampoco es una buena idea mencionar este método no estándar.La cita de Raymond de @jasonwryan tiene información útil, pero comienza en el medio de la historia:
'-'
carácter de opción se usó en Multics. Bitsavers tiene un manual para sus comandos de usuario .'/'
usan para TOPS y VMS) y otros menos (como los que se'('
usan en VM / SP CMS).-print
vs-pr
(página 3-8).getopt
se introdujo. Debido a que no era parte del Unix original, hay utilidades que no se usarongetopt
y se dejaron como están. Pero habergetopt
ayudado a hacer que los programas sean consistentes.Por otro lado, las opciones de Unix usando
getopt
eran de un solo carácter. Otros sistemas, en particular todos los más grandes, usaban palabras clave. Algunos (no todos) permitieron abreviar esas palabras clave , es decir, no se proporcionaron todos los caracteres siempre que la opción no fuera ambigua. Hay dificultades en esa prueba de ambigüedad. Por ejemplo:sta
, pensando en obtenerstatus
. Esa fue la abreviatura destart
, y al no haber dado nada para comenzar , el intérprete de comandos me desconectó.-v
(para la versión) sobre-vb
(campana visual). X Toolkit no tiene una forma directa de especificar una opción preferida cuando existe una ambigüedad.Debido a este potencial de ambigüedad, algunos desarrolladores prefieren no permitir abreviaturas. Lynx , por ejemplo, utiliza opciones de varios caracteres sin permitir abreviaturas.
No todos los programas utilizados
getopt
:tar
yps
no lo hicieron. Tampocorcs
(osccs
), como puede ver al observar dónde el guión era opcional, y los valores de las opciones eran opcionales.Teniendo todo esto en cuenta, los desarrolladores de GNU adaptaron las opciones de palabras clave utilizadas en otros sistemas extendiéndose
getopt
para proporcionar una versión larga de cada opción corta. Por ejemplo, el registro de cambios de textutils 1.0 diceEl cambio en fileutils fue anterior:
y alguien puede encontrar uno aún antes, pero parece que el encabezado del archivo muestra la fecha más temprana:
que es (por ejemplo) concurrente con el X Toolkit (1987). La mayoría de las utilidades de Unix con las que está familiarizado (como
ls
, por ejemplops
) usaban las opciones existentes de un solo carácter que requieren visitas periódicas al manual. Al presentargetopt_long
, los desarrolladores de GNU no hicieron esto al agregar primero nuevas opciones; que comenzaron por la tabulación de las opciones existentes y proporcionar una opción a largo juego.Debido a que se estaban agregando a un repertorio existente, existía (nuevamente) el problema del conflicto con las opciones existentes. Para evitar esto, cambiaron la sintaxis, usando dos guiones antes de las opciones largas.
Estos programas continúan utilizándose
getopt_long
de esta manera por los motivos habituales:fuente
En la interfaz de línea de comandos de Wikipedia se informa:
fuente
Supongo que se deseaban opciones más descriptivas y también con opciones más largas no tendrá que preocuparse por quedarse sin opciones de un solo carácter.
Una vez que decida que desea opciones largas, entonces tiene un problema, al menos si planea admitir opciones largas y cortas. No soy positivo, pero creo que la respuesta de Arcege tiene la clave de por qué - y -. Una rutina de procesamiento genérico, por ejemplo. getopt_long (), necesitaría saber si un solo argumento de línea de comando podría contener múltiples opciones, por ejemplo. -ltr. Por lo tanto, una rutina de procesamiento debería ser capaz de diferenciar entre los dos. Si leo un solo guión, -, entonces el resto del argumento de la línea de comando puede coincidir con múltiples opciones. Si leo un guión doble, -, entonces el resto del argumento de la línea de comando debe coincidir con una sola opción.
Recientemente utilicé getopt_long () y estoy empezando a gustarme las opciones largas, ya que son más fáciles de recordar y de documentar. Si tengo los siguientes dos comandos:
./aggregator -f 15
./aggregator --flush-time 15
Yo diría que el segundo que usa la opción larga es más autoexplicativo.
fuente
Probablemente hay algunas razones por las que se utilizan los dos métodos. Uno, por supuesto, es la tradición. Los programadores y usuarios son humanos, y los humanos esperan que las cosas funcionen de cierta manera. Si no hay razón para cambiar (y realmente, para una línea de comando, no hay muchas razones para cambiar), entonces no lo haga.
Dicho esto, sé que existen herramientas que usan el guión único para una opción larga, o incluso eliminan los guiones por completo. Estas herramientas pueden ser difíciles al principio y tienden a sobresalir como verrugas en un sistema unificado de otro modo.
Cuando estaba aprendiendo la diferencia entre los dos (y antes de que se convirtiera en una segunda naturaleza), siempre recordaba que el guión "corto" coincide con las opciones "cortas", mientras que el guión "largo" (o doble) coincide con el "largo" opciones. No sé si ese razonamiento se utilizó en el desarrollo del estilo de doble guión, pero es una posibilidad.
fuente