Fiquei me perguntando por que alguns programas exigem que seus parâmetros de prompt de comando tenham dois traços na frente, enquanto alguns (a maioria) exigem apenas um traço na frente?
Por exemplo, a maioria dos programas se parece com isso: relaxer -dtd toc.xml toc_gr.xml toc_jp.xml
Enquanto alguns programas são assim: xmllint --valid toc.xml --noout
Por que alguns exigem dois hífens em vez de um? Não faz sentido que todos sigam um padrão (ou seja, um único traço serve ).
linux
windows
command-line
unix
Pacerier
fonte
fonte
-i
vs.--input
ou-n
--dry-run
.-dtd
realmente deveria ter sido--dtd
? Efetivamente, o que eu queria saber é o que o traço (e o traço duplo) está tentando significar?--long-options
também aceitarão qualquer abreviação única. Portanto, para um programa com opções--file-in
e--file-out
, você pode usar--file-o=foo
ou--file-i=foo
, o que pode economizar digitação--very-long-optional-parameters
.convert
,mogrify
) têm "longo" opções usando apenas um único traço. Por exemplo:xterm -fn 6x10 -geometry 80x24+30+200
. Abreviações são suportadas, desde que sejam distintas ( por exemplo ,-g
ou-geom
para-geometry
). Veja X (7) para outros exemplos.Respostas:
Basta fazer
ls --help
e olhar para as opções; deve ser óbvio para você.Não tem nada a ver com parâmetros. Muitas opções têm uma forma curta e uma longa, e muitas têm uma e não a outra.
E também, no que diz respeito aos parâmetros, é simplesmente que, na forma longa, quando eles tomam um parâmetro, parece que sempre está igual. Mas, obviamente, os curtos podem aceitar parâmetros da mesma forma; apenas eles não usam iguais.
Aqui está um extrato de
ls --help
(man ls
fornece informações equivalentes). Observe como alguns têm uma forma muito tempo sem um formulário curto (--author
,--block-size
), alguns têm um pequeno formulário sem uma forma longa (-c
,-f
,-g
), e alguns têm ambos uma forma de comprimento e uma forma curta (-A
/--almost-all
,-b
/--escape
).fonte
ls --help
no windows?ls
no Windows. O comando equivalente seriadir /?
. Você está usando um software de plataforma cruzada que viola as convenções usuais do Windows, veja minha resposta.ls --help
trecho. Veja--author
e--block-size
.ls
comando é via GIT . O shell bash do GIT ou a janela CMD com compartimento GIT no PATH teráls
.Não existe um padrão generalizado. Há alguma consistência, por exemplo, nos programas GNU, mas você precisa verificar a documentação de cada programa.
Citando a Wikipedia , ênfase minha:
Geralmente, os hífens indicam um argumento predefinido. Eu acho que é usado para diferenciá-los de, por exemplo, nomes de arquivos ou outros rótulos que você pode usar como argumento. Mas nem sempre é esse o caso (veja abaixo).
Você encontrará frequentemente o mesmo argumento disponível tanto na opção curta quanto na longa, como por exemplo em ls .
Alguns programas usam um único hífen para opções de um caractere e dois hífens para opções de vários caracteres, mas não todos (GNU
find
vem à mente). Alguns programas têm hífens opcionais ou os ignoram completamente (tar
ou BSDps
vem à mente).Às vezes, opções longas (
--foo
) exigem argumentos, enquanto opções curtas (-f
) não (ou pelo menos implicam em um argumento padrão específico).Opções curtas (por exemplo
cut -d ' '
) podem ter argumentos, enquanto opções longas (por exemplols --all
) não necessariamente as têm.Para definir um comportamento específico de um programa, às vezes você precisa usar uma opção curta, para outros você precisa usar uma opção longa e para alguns você pode escolher.
Em uma nota relacionada, alguns programas não podem lidar com espaços em branco entre uma opção e seu argumento , enquanto outros não.
Como escrevi no começo, simplesmente não há comportamento ou padrão comum. Geralmente, você pode rastrear um comportamento semelhante à mesma biblioteca usada para análise de argumentos, mas provavelmente não deseja ler as fontes para descobrir isso.
Você realmente não pode inferir a sintaxe de argumento de um programa da outra.
Se você também considera o Windows, fica ainda pior: enquanto a linha de comando do Windows chama tradicionalmente
/f
(pelo menos na maioria das vezes, caracteres únicos) para opções, com:
o separador entre as opções e seu valor (veja, por exemplo, aqui ); os utilitários de plataforma cruzada são generalizados (como os mencionados) e trazem a sintaxe de hífen mais comum para argumentos, com todas as inconsistências mencionadas acima.fonte
tar
,ps
,find
e tal teve a sua sintaxe de linha de comando definido pela POSIX antes de este padrão tinham completamente gelificado. Em um sistema Gnu / Linux, é uma aposta razoavelmente segura de que pelo menos--help
(quase) sempre será suportado, assim comoman <command>
ouinfo <command>
find
que não segue a "convenção GNU" para opções longas (provavelmente por motivos de conformidade com o POSIX, como o @BRPocock apontou). Eu faria +1 novamente se pudesse, por mencionar a linha de comando do DOS / Windows "switches", já que a pergunta do OP de alguma forma foi marcada como "windows" e essa convenção deve ser mencionada por completo.Esta é uma convenção vinda do * nix. O hífen duplo precede as opções quando elas são escritas na íntegra , enquanto o hífen único precede as opções quando elas são escritas em formato abreviado . Por exemplo
ls --all --l
, pode ser reduzido parals -al
. Como se vê, nem todas as opções têm seus equivalentes de uma única letra, embora as mais usadas usualmente tenham.Se a opção aceita um argumento realmente não faz diferença - pode aceitá-los ou não, independentemente da maneira como você insere a opção.
Ao gravá-los para uso único, isso realmente não importa, mas ao escrever comandos, por exemplo, em arquivos .alias, é habitual usar o formulário completo. Puramente pela facilidade de leitura para a próxima pessoa.
fonte
estas são sintaxes convencionais do UNIX,
um argumento do programa usa um hífen ("-") seguido de uma única letra quando é uma opção simples (por exemplo: -v ) e dois hífens ("-") quando a opção recebe argumentos (por exemplo: --file toc.xml ou --arquivo = toc.xml )
sem impacto na funcionalidade do programa.
fonte
--noout
(na pergunta acima) deveria realmente ter sido escrito,-noout
pois não possui argumentos ?traço único é implementado pelo getopt e é a função padrão posix, traço duplo no getopt_long e é um padrão gnu.
Tradicionalmente, um único traço fornece uma opção de caractere assim:
-A ou -V etc, mas não precisa se limitar a isso. por exemplo, -Wall for gcc ativa todos os avisos do compilador para o comando gcc compiler.
argumentos de traço duplo tendem a ser mais detalhados e geralmente usam um parâmetro fornecido como --max-count = NUM. No entanto, --version não leva iguais.
De um modo geral, não há regras ou padrões definidos sobre como os argumentos do programa devem ser especificados, apenas um monte de tradições. No entanto, se as funções de análise de linha de comando getopt e getopt_long forem usadas, os parâmetros geralmente deverão seguir o padrão, pois as funções da biblioteca impõem uma certa maneira de fazê-lo.
fonte