O mais comum é o estilo getopt
do GNU, com um traço para opções curtas e dois traços para opções longas.
-
Inicialmente, os programas Unix utilizavam opções de letras únicas precedidas por um único traço e, opcionalmente, agrupadas:
ls -laF ls -l -a -F
Os dois comandos acima são iguais.
Quando uma opção recebe um valor, ela substitui o empacotamento: Em
gpg -aofoo.gpg
,-a
e-o
são opções efoo.gpg
é o valor atribuído a-o
. -
A maioria deles, de qualquer forma.
tar cvzf
é uma visão comum. As versões atuais aceitamtar -cvzf
também e, dependendo de você adicionar o traço, os argumentos serão interpretados de maneiras muito diferentes. Por exemplo, esses dois significam a mesma coisa (observe como as opções sem painel não são imediatamente antes de seu valor):tar -xf file.tgz -vzO /etc/passwd /var/backups
tar xfvzO file.tgz /etc/passwd /var/backups
O BSD
ps
sempre usa-
; O SysVps
nunca faz. A versão do Linux aceita ambas as versões e altera seu comportamento dependendo se uma opção foi prefixada com um traço. (Diferentemente do exemplo de tar acima, ps também muda a opção significados ). -
Os programas X11 usam opções longas precedidas por um único traço ou, às vezes, um sinal de mais:
xterm -class FooTerm +vb -u8
Isso define as opções
class
eu8
e desmarca a opçãovb
.O estilo X11 é incompatível com o pacote de opções.
-
Mais tarde, opções longas foram adicionadas ao GNU
getopt()
de uma maneira compatível com as opções de uma letra.gpg -se --no-armor --output=signed.gpg
Isso define
-s
,-e
e--no-armor
(que é o oposto de--armor
).Normalmente,
--output=signed.gpg
e--output signed.gpg
são equivalentes. (Mas nem sempre - por exemplo, curl não aceita o primeiro, apenas o último).(Se bem me lembro, as opções longas usavam
+
como o prefixo antes de ser alterado para--
.) -
A especificação POSIX tem uma seção Sintaxe do argumento do utilitário , que descreve a opções de caracteres.
A maioria dos programas do Windows usa seus próprios analisadores, enlouquecendo os usuários.
- Alguns exigem
/a /b /c
, outros permitem o estilo VMS/a/b/c
, mas outros preferem o estilo Unix/abc
. - A maioria usa
/
como prefixo, alguns também aceitam-
, outros aceitam somente-
. - Os valores podem ser fornecidos como
/foo bar
,/foo=bar
,/foo:bar
. - Normalmente, os espaços podem ser
/quoted "like this"
, mas alguns programas consideram o"
como um caractere literal. (Essa é uma desvantagem de permitir que o programa faça sua própria divisão de palavras; no Unix, isso é feito pelo shell.) - Os programas de plataforma cruzada podem usar uma implementação de
getopt
.