Qual é a diferença entre uma bandeira, uma opção e um argumento? [fechadas]

14
  • ls -a(Eu considero -auma opção)

  • sudo -u username( -u= opção, username= arg)

  • chmod 664 my-dir( 664= opção, my-dir= arg)

Não consigo pensar em um exemplo que possa dizer "isso é uma bandeira", exceto talvez ao olhar para a lista de diretórios:

-r--------. 1 david david   3344 May 19 17:48 611056.pdf

Isso tem o "sinalizador de leitura" definido para o proprietário, mas é tudo. O que me impede de chamar isso de "opção de leitura"?

Escrevo e edito a documentação técnica, principalmente no DocBook XML, e estou procurando uma explicação da diferença, que seja consistente e precisa quanto possível. No entanto, eu já estou vendo um padrão se formando:

  1. sinalizadores tendem a ser booleanos. por exemplo,setenforce 0
  2. As opções ajudam a definir como um comando deve se comportar. Alguns podem ser opcionais.
  3. argumentos dizem comandos em que objeto operar.

Eu podia me ver combinando sinalizadores e opções (algumas opções podem ter uma dúzia de valores possíveis, mas os booleanos têm apenas dois). Os argumentos parecem suficientemente diferentes para mantê-los como tais.

JohnDoea
fonte
2
"O que me impede de ligar ..."? Oo nada. Assim como nada me impede de chamar uma pá de árvore.
Muru
@muru - embora um dicionário em inglês discorde da sua afirmação.
DarkHeart 26/05
3
Para tornar as coisas mais confusas, eu também chamaria uma opção que não aceita um parâmetro / argumento como sinalizador, como no seu ls -aexemplo. (Para mim, uma bandeira é uma variável booleana.)
Ulrich Schwarz
3
Eles são canis ; todos os trinta deles. :-) ⁠
Scott
O padrão que você vê só existe, porque você restringe as coisas que deseja ver. Uma maneira de criar um arquivo TAR (que venho usando há mais de 30 anos) e não, por exemplo, extraí-lo é:, tar c abc.txt > x.tarexiste cuma função . Você está tentando chamar isso de opção e isso é completamente inapropriado.
Anthon

Respostas:

17

Não há definições consistentes dos termos "opção", "argumento" e "sinalizador", e não há autoridade central no mundo do desenvolvimento de software que possa impor seu uso. Isso acontece com muita terminologia: depois de mais de 30 anos usando a palavra "diretório", agora tenho que lidar com pessoas que usam a palavra "pasta" que foram confundidas com a nova linguagem da Microsoft.

Existem diferentes maneiras pelas quais definições de consenso para termos podem ocorrer na programação. No caso de "argumento" / "opção" / "sinalizador", manuais e tutoriais canônicos para linguagens de programação ajudaram a impor o uso, assim como os termos usados ​​em bibliotecas comuns.

Por exemplo, as coisas que você coloca na linha de comando após um comando geralmente são chamadas de "argumentos" para o comando, por analogia com argumentos para uma chamada de função , e isso provavelmente ocorre em parte porque são chamadas de "argumentos" no manual C ( daqui argce argv). A argparsebiblioteca Python também ajuda a aplicar o termo "argumento". No entanto, eu também os vi sendo chamados de "parâmetros".

O termo "opção" é derivado de "opcional", o que implica que eles podem ser deixados de fora. A getoptbiblioteca C é um uso desse termo. Mas há precedentes para "opções" que não são realmente opcionais: por exemplo, o argparse manual afirma que é possível criar uma "opção necessária" (embora também diga que essa é "geralmente considerada má forma"). As opções são muitas vezes precedida por um único ( -) ou duplo ( --e de longo opção) traço, mas existem comandos bem conhecidas que não exige ou impõe o uso de traço para opções (por exemplo, tar, pse dd). Uma opção pode, por si só, aceitar um argumento (por exemplo, -w80e --color=always) ou, ocasionalmente, vários argumentos.

Os "sinalizadores" são, na minha experiência, o mesmo que as opções, mas geralmente não recebem argumentos e representam essencialmente opções on-off booleanas.

Em uma nota mais ampla, como todo programador tem a opção de procurar uma maneira padrão de fazer e nomear coisas, mas também pode reinventar a roda sem muito custo extra, a nomeação nunca será consistente. E depois de documentar seu código, e fica claro qual o novo significado que você atribuiu a essas palavras, dando exemplos, esses nomes e significados podem permanecer se houver pessoas suficientes que os buscarem no seu código.

Anthon
fonte
7

Um sinalizador é um tipo de opção, uma opção do tipo booleano, e sempre é falso por padrão (por exemplo - --verbose, --quiet, --all, --long, etc).

Uma opção diz à função como agir (por exemplo, -a, -l, --verbose, --output, -name, -c, etc.), enquanto um argumento diz à função em que agir / de (por exemplo *, arquivo1, nome do host, banco de dados).

Ziggy Crueltyfree Zeitgeister
fonte
Então, na sua definição, em git pull git://bla/bla, o pullé um argumento que diz no gitque trabalhar.
Anthon
1
@Anton não, existem operadores (opções / sinalizadores / parâmetros), argumentos e comandos . pullé um comando. Pode-se pensar em comandos como extensões do nome do aplicativo: git pull <...> é equivalente a um aplicativo chamado git-pull. Quando o aplicativo possui comandos, cada comando faz com que o aplicativo faça algo completamente diferente.
Ziggy Crueltyfree Zeitgeister
O pessoal do git pode chamá-lo de comando, mas nem sempre é o que é chamado, por exemplo tar, usar cpara criar é chamado de função . E esse é exatamente o problema: não há padronização de termos, mesmo que pareça que você acha que há uma resposta
Anthon
um sinalizador não precisa ser falso por padrão. fornecer o sinalizador na linha de comando apenas reverte seu estado padrão (ativado -> desativado ou desativado -> ativado). algumas pessoas chamam isso de alternância para diferenciá-lo de uma bandeira. outros acham que a distinção não é importante.
26516