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?
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?
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:
tar -czf
Neste exemplo, -czf
especifica três bandeiras com um único caractere: c
, z
, e f
.
Agora considere outro exemplo:
tar --exclude
Nesse caso, --exclude
especifica uma opção única com vários caracteres denominada exclude
. O hífen duplo disambiguates o argumento de linha de comando, assegurando que tar
interpreta como exclude
, em vez de uma combinação de e
, x
, c
, l
, u
, d
, e e
.
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")
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 -lisa
do que ls --lisa
. Os primeiros são os l
, i
, s
, e a
parâ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, dd
e gcc
.
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.