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

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.

psusi
fuente
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

mulaz
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.

ssice
fuente
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.

Premraj
fuente