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


70

Eu sou novo em trabalhar no shell e o uso desses comandos parece arbitrário. Existe uma razão para um sinalizador ter um único traço e outro poder ter um traço duplo?


Supõe-se que seja governado pelo padrão POSIX: iam.ubc.ca/guides/javatut99/essential/attributes/_posix.html
cjc

Esse link é agora 404 @cjc :( Um link possivelmente mais confiável poderia ser en.wikipedia.org/wiki/POSIX
Bernhard Hofmann

Respostas:


110

Um único hífen pode ser seguido por vários sinalizadores de caractere único. Um hífen duplo prefixa uma opção única de vários caracteres.

Considere este exemplo:

tar -czf

Neste exemplo, -czfespecifica três bandeiras com um único caractere: c, z, e f.

Agora considere outro exemplo:

tar --exclude

Nesse caso, --excludeespecifica uma opção única com vários caracteres denominada exclude. O hífen duplo disambiguates o argumento de linha de comando, assegurando que tarinterpreta como exclude, em vez de uma combinação de e, x, c, l, u, d, e e.


11
@kylex, não, já que não existe uma opção longa denominada apenas "c" e - significa uma opção longa, não uma opção de caractere único a seguir.
Psusi 10/10/12

13
Às vezes, mesmo comandos longos podem ter um único traço. Por exemplo, 'cdrecord' usa todos os comandos de tracejado único (-eject -dao ...). Tudo depende do programa, mas a maioria deles usar (!) - para um único e - para com vários caracteres (longo) comanda
mulaz

8
@mulaz, sim, o cdrecord faz algumas coisas patetas.
Psusi

10
Também lembre-se - usado por si só geralmente significa o fim das opções. veja aqui para obter mais informações: unix.stackexchange.com/questions/11376/…
Sirex

3
@killjoy, porque, por ignorância ou escolha, os autores desses programas não seguiram a convenção, é claro. Assim como cdrecordmencionado anos atrás nos comentários acima.
Psusi

17

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 (portanto "-h -a" é igual a "-ha")

Em sistemas tipo Unix, o hífen ASCII – menos é comumente usado para especificar opções. O caractere geralmente é seguido por uma ou mais letras. Um argumento que é um único hífen – menos por si só, sem nenhuma letra, geralmente especifica que um programa deve manipular dados provenientes da entrada padrão ou enviar dados para a saída padrão. Dois caracteres hífen – menos (-) são usados ​​em alguns programas para especificar "opções longas" onde nomes de opções mais descritivos são usados. Esse é um recurso comum do software GNU.

fonte


2
Então, por que é versão Java e versão formiga?
killjoy

7

É realmente uma convenção. No entanto, pode ajudar os analisadores a conhecer com mais eficiência as opções passadas para o programa. Além disso, existem utilitários interessantes que podem ajudar a analisar esses comandos, como getopt(3)o não padrão, getopt_long(3)para ajudar a analisar os argumentos de um programa.

É bom, 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, haveria provavelmente tem um significado diferente para escrever ls -lisado que ls --lisa. Os primeiros são os l, i, s, e aparâmetros, 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 a minha vista, dde gcc.


3

opções curtas com traço único vs opções longas com traço duplo

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 traço único, isso causará ambiguidade. Para resolver isso, usamos traço duplo para opções longas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.