¿Por qué hay alternativas cortas y largas para las opciones de línea de comandos?

21

La mayoría de los comandos unixoides presentan alternativas cortas y largas para las opciones de línea de comandos, como ls -ay ls --all, o ls -Ay ls --almost-all. ¿Por qué existen esas dos formas? Uno es más corto de escribir, el otro es más fácil de leer y entender. Pero cada vez que escribo un script de shell, necesito decidir cuál quiero usar. ¿Se sabe por qué existen las dos alternativas? Cuál fue primero, por qué se presentó el otro. En DOS / Windows, por ejemplo, hay casi solo opciones de una letra que no distinguen entre mayúsculas y minúsculas.

ygoe
fuente

Respuestas:

23

Originalmente solo había opciones de un solo carácter. Algunos programas tomaron opciones de múltiples caracteres, pero aún con un solo guión. Las opciones de caracteres múltiples de doble guión de AFAIK provienen de GNU ; se introdujeron porque son más legibles y, a menudo, más memorables (y puede tener más de 52 de ellos). Muchos programas ahora tienen ambas: opciones cortas para cuando estás escribiendo en la línea de comando y recuerdas el carácter, opciones largas para scripts o en la línea de comando si solo recuerdas el nombre de la opción más larga.

Gilles
fuente
14
+1 por mencionar que las opciones largas son mejores para los scripts, porque ayudan a documentar las cosas
Norman Gray
55
En cuanto a "solo 52 de ellos": intente ls -BartSimpsonIsJustCool(o Greatsi está en Solaris.
Aaron Digulla
1
@AaronDigulla ¿Es este huevo de Pascua?
user712092
55
@ user712092 No, es un truco. En Linux, todo lo que Isigue es el argumento de la -Iopción, por lo que solo hace una diferencia si tiene un archivo llamado sJustCoolen el directorio actual. La -BartSimpsonparte se puede reordenar, excepto que el S(ordenar por tamaño) debe permanecer después del t(ordenar por fecha). Tampoco mtiene efecto cuando no oestán presentes. Entonces, el comando es equivalente a ls -BSainopsr, y si no me he perdido nada, no puede eliminar otra letra para lograr el mismo resultado y puede reordenar estas letras libremente.
Gilles
2
@Gilles: por cierto, para ser lo más preciso posible, puede haber 62 opciones cortas diferentes (incluidos los dígitos), no 52. Considere, gzip -9 filenamepor ejemplo.
Radko Dinev
1

Podrías adivinar que es cuestión de gustos. Al escribir en la línea de comando, puede preferirse una opción corta, especialmente en el caso de las opciones de ejecución conjunta (por ejemplo ls -AL). Las opciones largas son mejores para transmitir la intención, por lo que no necesita consultar la página de manual cuando lea ls --almost-all --dereference.

Naturalmente, a medida que adquiera experiencia, puede comprobar que las dos -Ay -Lcortos opciones son suficientemente conocidos, y no requieren de esta documentación adicional. Especialmente en un comando complejo que puede combinar varios comandos de manera interesante con evaluación, redirección, etc. En tal caso, puede preferir la brevedad sobre la documentación.

Chen Levy
fuente
1

Otro propósito que puedo ver al tener diferentes formas de especificar parámetros (cortos y largos) es que al escribir, a la gente de la línea de comandos de Unix / Linux le gusta tener los comandos más cortos posibles. Sin embargo, esos pueden volverse crípticos, y si un guión se escribe usando esas versiones cortas, pueden volverse difíciles de entender en el futuro. El uso de la versión larga puede hacer que el mismo comando sea más legible y entendible por alguien que no sea el gurú de este comando, especialmente si este comando es en realidad un script escrito localmente en lugar de un comando conocido.

jfmessier
fuente