De onde surgiu a convenção de usar traços simples para letras e traços duplos para palavras e por que continua a ser usado?
Por exemplo, se eu digitar ls --help
, você vê:
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author with -l, print the author of each file
-b, --escape print octal escapes for nongraphic characters
--block-size=SIZE use SIZE-byte blocks
-B, --ignore-backups do not list implied entries ending with ~
...
Eu tentei pesquisar no Google - and -- convention
mesmo com citações com pouco sucesso.
command-line
history
options
Larry
fonte
fonte
-
é tecnicamente chamado de hífen . Usamos a palavra "traço" para nos referir ao traço em (-) na maioria dos casos, e às vezes o traço (-), mas nenhum dos quais é um hífen (-).java -version
find . -delete
-ab
que ativa ambosa
eb
. Sem o traço duplo,-help
ativariah
,e
,l
, ep
opções.Respostas:
Na arte da programação para Unix, Eric Steven Raymond descreve como essa prática evoluiu:
[1] http://www.faqs.org/docs/artu/ch10s05.html
fonte
Uma razão para continuar usando as opções de letra única é porque elas podem ser combinadas:
ls -ltr
é muito mais fácil digitar do quels --sort=time --reverse --format=long
. Existem várias vezes em que ambos são bons de usar. Quanto à procura deste tópico, tente "convenção de opções de linha de comando unix".fonte
ls --sort=time --reverse --format=long
, não é uma boa idéia mencionar esse método não padrão.A citação de Raymond por @jasonwryan tem algumas informações úteis, mas começa no meio da história:
'-'
caractere de opção foi usado no Multics. O Bitsavers possui um manual para seus comandos de usuário .'/'
usado para TOPS e VMS) e outros menos (como'('
usado no VM / SP CMS).-print
vs-pr
(página 3-8).getopt
foram introduzidas. Por não fazer parte do Unix original, existem utilitários que não foram utilizadosgetopt
e foram deixados como estão. Mas, tendogetopt
ajudado a tornar os programas consistentes.Por outro lado, as opções do Unix usando
getopt
eram de um caractere. Outros sistemas, em particular todos os maiores, usavam palavras-chave. Alguns (nem todos) permitiram que essas palavras-chave fossem abreviadas , ou seja, nem todos os caracteres foram fornecidos desde que a opção fosse inequívoca. Existem armadilhas nesse teste de ambiguidade. Por exemplo:sta
, pensando em receberstatus
. Essa era a abreviação destart
, e não tendo dado nada para começar , o intérprete de comando me desconectou.-v
(para versão) sobre-vb
(visual bell). O X Toolkit não tem maneira direta de especificar uma opção preferida quando houver uma ambiguidade.Devido a esse potencial de ambiguidade, alguns desenvolvedores preferem não permitir abreviações. O Lynx , por exemplo, usa opções de vários caracteres sem permitir abreviações.
Nem todos os programas utilizados
getopt
:tar
eps
não. Nemrcs
(ousccs
), como você pode ver, observando onde o traço era opcional e os valores das opções eram opcionais.Levando tudo isso em consideração, os desenvolvedores do GNU adaptaram as opções de palavras-chave usadas em outros sistemas, estendendo
getopt
- se para fornecer uma versão longa de cada opção curta. Por exemplo, o changelog do textutils 1.0 dizA mudança no fileutils foi anterior:
e alguém pode encontrar um ainda mais cedo, mas parece que o cabeçalho do arquivo mostra a data mais antiga:
que é (por exemplo) simultâneo com o X Toolkit (1987). A maioria dos utilitários Unix com os quais você está familiarizado (como
ls
,ps
) usava as opções de caractere único existentes que requerem visitas periódicas ao manual. Ao introduzirgetopt_long
, os desenvolvedores GNU não fazer isso, primeiro adicionando novas opções; eles começaram tabulando as opções existentes e fornecendo uma opção longa correspondente.Como eles estavam adicionando a um repertório existente, havia (novamente) o problema de conflito com as opções existentes. Para evitar isso, eles mudaram a sintaxe, usando dois traços antes das opções longas.
Esses programas continuam a ser utilizados
getopt_long
dessa maneira pelos motivos usuais:fonte
Na interface de linha de comando da wikipedia , é relatado:
fonte
Meu palpite é que opções mais descritivas foram desejadas e também com opções mais longas, você não precisará se preocupar em ficar sem opções de caracteres únicos.
Depois de decidir que deseja opções longas, há um problema, pelo menos se você planeja oferecer suporte a opções longas e curtas. Não sou positivo, mas acredito que a resposta da arcege é a chave do porquê - e -. Uma rotina de processamento genérica, por exemplo. getopt_long (), precisaria saber se um único argumento de linha de comando poderia conter várias opções, por exemplo. -ltr. Assim, uma rotina de processamento precisaria ser capaz de diferenciar entre os dois. Se eu ler um único traço, -, o restante do argumento da linha de comandos poderá corresponder a várias opções. Se eu ler um traço duplo, -, o restante do argumento da linha de comandos deverá corresponder a uma única opção.
Recentemente, usei getopt_long () e estou começando a gostar de opções longas, pois elas são mais fáceis de lembrar e se auto-documentam. Se eu tiver os seguintes dois comandos:
./aggregator -f 15
./aggregator --flush-time 15
Eu diria que o segundo usando a opção longa é mais auto-explicativo.
fonte
Provavelmente, existem alguns motivos pelos quais os dois métodos são usados. Uma, é claro, é tradição. Programadores e usuários são humanos, e os humanos esperam que as coisas funcionem de uma certa maneira. Se não há motivos para mudar (e realmente, para uma linha de comando, não há muitos motivos para mudar), então não faça.
Dito isto, eu sei que existem ferramentas por aí que usam o hífen único por uma longa opção ou até mesmo se livram dos hífens. Essas ferramentas podem ser difíceis no começo e tendem a se destacar como verrugas em um sistema unificado.
Quando eu aprendia a diferença entre os dois (e antes de se tornar uma segunda natureza), eu sempre me lembrava que o hífen "curto" corresponde às opções "curtas", enquanto o hífen "longo" (ou duplo) corresponde ao "longo" opções Não sei se esse raciocínio foi usado no desenvolvimento do estilo de hífen duplo, mas é uma possibilidade.
fonte