Qual é a diferença entre os traços de traço único e traço duplo nos comandos do shell?

54

Eu sou novo em trabalhar no shell e o uso desses comandos parece arbitrário. Existe uma razão pela qual uma bandeira tem um único traço e outra pode ter um duplo traço?

    
por kylex 10.05.2012 / 14:27

4 respostas

92

Um único hífen pode ser seguido por vários sinalizadores de caractere único. Um hífen duplo é um prefixo de uma única opção multicharacterística.

Considere este exemplo:

tar -czf

Neste exemplo, -czf especifica três sinalizadores de caractere único: c , z e f .

Agora considere outro exemplo:

tar --exclude

Nesse caso, --exclude especifica uma única opção multicharacter chamada exclude . O hífen duplo desambigua o argumento de linha de comando, garantindo que tar interprete como exclude em vez de uma combinação de e , x , c , l , u , d , e e .

    
por 10.05.2012 / 14:32
14

Tudo depende do programa. Normalmente "-" é usado para opções "curtas" (uma letra, -h), e "-" é usado para opções "longas" (er) (--help).

Opções curtas geralmente podem ser combinadas (então "-h -a" é o mesmo que "-ha")

In Unix-like systems, the ASCII hyphen–minus is commonly used to specify options. The character is usually followed by one or more letters. An argument that is a single hyphen–minus by itself without any letters usually specifies that a program should handle data coming from the standard input or send data to the standard output. Two hyphen–minus characters ( -- ) are used on some programs to specify "long options" where more descriptive option names are used. This is a common feature of GNU software.

fonte

    
por 10.05.2012 / 14:35
6

É realmente uma convenção. No entanto, ele pode ajudar os analisadores a saber mais eficientemente sobre as opções passadas para o programa. Além disso, existem utilitários que podem ajudar a analisar esses comandos, como getopt(3) ou não padronizado getopt_long(3) para ajudar a analisar os argumentos de um programa. / p>

É legal, pois podemos ter várias opções curtas combinadas, como outras respostas dizem, como tar -xzf myfile.tar.gz .

Se houvesse um argumento "lisa" para ls , provavelmente haveria um significado diferente para digitar ls -lisa than ls --lisa . Os primeiros são os parâmetros l , i , s e a , não a palavra.

Na verdade, você poderia escrever ls -l -i -s -a , significando exatamente o mesmo que ls -lisa , mas isso dependeria do programa.

Existem também programas que não obedecem a esta convenção. Mais notavelmente para minha visão, dd e gcc .

    
por 10.05.2012 / 18:56
2

short options with single dash vs long options with double dash

opções curtas podem ser combinadas em um único argumento;

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

Se permitirmos opções longas com um único traço, isso causa ambiguidade. Para resolver isso, usamos traço duplo para opções longas.

    
por 29.08.2017 / 03:48