Confusão sobre a mudança de significado de argumentos e opções, existe uma definição oficial padrão?

11

Me deparei com uma variação confusa no entendimento de quais são as opções e argumentos em relação à sintaxe dos comandos.

Por exemplo, eu encontrei definições como:

  • command -a -b -c d e f

    alguns diferem entre -a -b -celes, chame-os de opções ou opções e d e fchame-os de argumentos.

  • command -a -b -c d e f

    alguns, por exemplo, um bashmanual, chamam todos os -a -b -c d e fargumentos e explicam que todos eles são acessíveis a partir de um script, $1 $2 $3 $4 $5 $6respectivamente.

  • command -a b=c

    alguns chamam -auma opção, bum argumento e co valor, mas outros os misturam como nos dois primeiros pontos, em uma variedade chamando todos os -a b cargumentos.

Essas três versões são apenas exemplos de uma variedade de diferentes tipos de chamadas, eu nem sei como listá-las todas, mas notei que, com certeza, não existe uma convenção de nomenclatura fixa.

Ou, pelo menos, não há uma convenção de nomenclatura padronizada que eu conheça, porque me deparei com diferentes fontes aleatórias, mas mesmo entre sites ou manuais oficiais de Linux e GNU, eu pude encontrar essa inconsistência.

Existe um esquema de nomeação oficial inquestionável ao qual posso me referir?

tubarão
fonte
A segunda forma é 100% correta do seu próprio ponto de vista. O contexto é muito importante.
Oskar Skog

Respostas:

18

Adaptado da seção "Utility Argument Syntax" do padrão POSIX :

utility_name [-a] [-b] [-c option_argument]
             [-d|-e] [-f[option_argument]] [operand...]

O utilitário no exemplo é nomeado utility_name. É seguido por opções , argumentos de opção e operandos .

Os argumentos que consistem em -caracteres e letras ou dígitos únicos, como a, são conhecidos como opções (ou, historicamente, sinalizadores ). Certas opções são seguidas por um argumento de opção , como mostrado em [-c option_argument]. Os argumentos após as últimas opções e argumentos da opção são nomeados operandos .

O padrão também define "argumento" como

Na linguagem de comando do shell, um parâmetro passado para um utilitário como o equivalente a uma única sequência na argvmatriz criada por uma das execfunções. Um argumento é uma das opções, argumentos de opção ou operandos após o nome do comando.


Todas as coisas após a utility_namelinha de comando são os argumentos do utilitário , e todos aparecem nos parâmetros posicionais, se for um shell script. Os termos opção, opção-argumento e operando são nomes mais específicos para esses argumentos na linha de comando.

"Flag" e "switch" são sinônimos comuns de "option".

No caso de

utility -a b=c
  • -ae b=csão argumentos,
  • -aé uma opção se o utilitário o reconhecer como tal (o lnutilitário não tem -xopção, portanto -xnão é uma opção lnestritamente falando e ln -xacionaria uma mensagem de diagnóstico),
  • b=cé um argumento de opção se a -aopção aceita um argumento, caso contrário, é um operando,
  • be nãoc são opções, argumentos de opção e não operandos em si.

Como você notou no meu texto acima, trabalhar na sinopse de um utilitário (conforme fornecido pelo manual do utilitário) teria sido mais fácil do que tentar decodificar um comando genérico digitado na linha de comando. O manual indicará claramente quais opções recebem argumentos de opção e quais argumentos são operandos etc.

Chamar cum "valor" é IMHO perfeitamente ok. Não é algo padronizado, mas poucos o entenderiam mal se você dissesse " cé o valor dado ab ". Ficaria claro a partir do contexto do utilitário em questão.

Por exemplo

$ awk -v var="d" '...' data.in

Qualquer pessoa que saiba sobre awkisso diria que -v var="d"significa " a awkvariável varrecebe o valor dna linha de comando ".

Kusalananda
fonte