¿Cuál es la diferencia entre las marcas de guión simple y guión doble en los comandos de shell?


70

Soy nuevo en el trabajo en el shell y el uso de estos comandos parece arbitrario. ¿Hay alguna razón por la cual una bandera tiene un solo guión y otra podría tener un guión doble?


Se supone que se rige por el estándar POSIX: iam.ubc.ca/guides/javatut99/essential/attributes/_posix.html
cjc

Ese enlace ahora es 404 @cjc :( Un enlace posiblemente más confiable podría ser en.wikipedia.org/wiki/POSIX
Bernhard Hofmann

Respuestas:


110

Un solo guión puede ser seguido por múltiples banderas de un solo carácter. Un guión doble prefija una opción única de varios caracteres.

Considere este ejemplo:

tar -czf

En este ejemplo, -czfespecifica tres banderas de un solo carácter: c, z, y f.

Ahora considere otro ejemplo:

tar --exclude

En este caso, --excludeespecifica una opción única de varios caracteres denominada exclude. El guión doble de ambigüedad el argumento de línea de comandos, asegurando que tarlo interpreta como excludelugar de una combinación de e, x, c, l, u, d, y e.


1
@kylex, no, ya que no hay una opción larga llamada solo "c" y la - significa una opción larga, no sigue una sola opción de carácter.
psusi

13
A veces, incluso los comandos largos pueden ser de un solo guión. Por ejemplo, 'cdrecord' usa todos los comandos de un solo guión (-eject -dao ...). Todo depende del programa, pero la mayoría (!) De ellos usan - para comandos simples y - para múltiples caracteres (largos)
mulaz

8
@mulaz, sí, cdrecord hace bastantes tonterías.
psusi

10
También tenga en cuenta: el uso por sí solo generalmente significa el final de las opciones. ver aquí para más información: unix.stackexchange.com/questions/11376/…
Sirex

3
@killjoy, porque ya sea por ignorancia o por elección, los autores de esos programas no siguieron la convención, por supuesto. Tal como se cdrecordmencionó hace años en los comentarios anteriores.
psusi

17

Todo depende del programa. Por lo general, "-" se usa para las opciones "cortas" (una letra, -h), y "-" se usa para las opciones "largas" (er) (--help).

Las opciones cortas generalmente se pueden combinar (por lo que "-h -a" es lo mismo que "-ha")

En sistemas similares a Unix, el guión ASCII menos se usa comúnmente para especificar opciones. El carácter suele ir seguido de una o más letras. Un argumento que es un solo guión, menos por sí mismo sin letras, generalmente especifica que un programa debe manejar los datos que provienen de la entrada estándar o enviar datos a la salida estándar. Se usan dos guiones – menos caracteres (-) en algunos programas para especificar "opciones largas" donde se usan nombres de opciones más descriptivos. Esta es una característica común del software GNU.

fuente


2
Entonces, ¿por qué es java -version y ant -version, entonces?
killjoy

7

Realmente es una convención. Sin embargo, puede ayudar a los analizadores a conocer de manera más eficiente las opciones pasadas al programa. Además, hay utilidades ordenadas que pueden ayudar a analizar estos comandos, como getopt(3)el no estándar getopt_long(3)para ayudar a analizar los argumentos de un programa.

Es bueno, ya que podemos tener múltiples opciones cortas combinadas, como dicen otras respuestas, como tar -xzf myfile.tar.gz.

Si hubiera un argumento "lisa" para ls, probablemente tendría un significado diferente para escribir ls -lisaque ls --lisa. Los primeros son los l, i, s, y alos parámetros, no la palabra.

De hecho, podría escribir ls -l -i -s -a, lo que significa exactamente lo mismo que ls -lisa, pero eso dependería del programa.

También hay programas que no obedecen esta convención. Lo más notable para mi vista, ddy gcc.


3

opciones cortas con un solo guion frente a opciones largas con un doble guion

las opciones cortas se pueden combinar en un solo argumento;

for example: ls -lrt #instead of ls -l -r -t

Si permitimos opciones largas con un solo guión, causa ambigüedad. Para resolver esto, usamos doble guión para opciones largas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.