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?
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.
@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.
@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.
É 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.
Respostas:
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:
Neste exemplo,
-czf
especifica três bandeiras com um único caractere:c
,z
, ef
.Agora considere outro exemplo:
Nesse caso,
--exclude
especifica uma opção única com vários caracteres denominadaexclude
. O hífen duplo disambiguates o argumento de linha de comando, assegurando quetar
interpreta comoexclude
, em vez de uma combinação dee
,x
,c
,l
,u
,d
, ee
.fonte
cdrecord
mencionado anos atrás nos comentários acima.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")
fonte
fonte
É 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 escreverls -lisa
do quels --lisa
. Os primeiros são osl
,i
,s
, ea
parâmetros, não a palavra.Na verdade, você poderia escrever
ls -l -i -s -a
, significando exatamente o mesmo quels -lisa
, mas isso dependeria do programa.Existem também programas que não obedecem a esta convenção. Mais notavelmente para a minha vista,
dd
egcc
.fonte
opções curtas podem ser combinadas em um único argumento;
Se permitirmos opções longas com traço único, isso causará ambiguidade. Para resolver isso, usamos traço duplo para opções longas.
fonte