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

11

Me deparei com uma variação confusa na compreensão de quais opções e argumentos são relacionados à sintaxe dos comandos.

Por exemplo, eu encontrei definições como:

  • command -a -b -c d e f

    algumas diferem entre -a -b -c , chamem-as de opções ou opções e d e f chamando-as de argumentos.

  • command -a -b -c d e f

    alguns, por exemplo, um manual bash , chamamos todos os argumentos -a -b -c d e f e explica que todos eles são acessíveis a partir de um script em $1 $2 $3 $4 $5 $6 , respectivamente.

  • command -a b=c

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

Essas três versões são apenas exemplos para uma infinidade de variedades de chamadas diferentes, eu nem sei como listar todas elas, mas notei que, com certeza, não há uma convenção de nomenclatura fixa.

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

Existe um esquema oficial de nomenclatura inquestionável ao qual eu posso me referir?

    
por sharkant 11.05.2017 / 12:30

1 resposta

18

Adaptado de a seção "Sintaxe do argumento do utilitário" do padrão POSIX :

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

O utilitário no exemplo é denominado utility_name . Ele é seguido por opções , opção-arguments e operandos .

Os argumentos que consistem em - caracteres e letras únicas ou dígitos, como a , são conhecidos como opções (ou, historicamente, flags ). Certas opções são seguidas por um argumento da opção , conforme mostrado em [-c option_argument] . Os argumentos que seguem as últimas opções e os argumentos da opção são denominados operandos .

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

In the shell command language, a parameter passed to a utility as the equivalent of a single string in the argv array created by one of the exec functions. An argument is one of the options, option-arguments, or operands following the command name.

Todas as coisas após o utility_name na linha de comando são os argumentos do utilitário, e todas elas aparecem nos parâmetros posicionais se for um script de shell. Os termos option, option-argument e operand são nomes mais específicos para esses argumentos na linha de comando.

"Sinalizar" e "alternar" são sinônimos comuns para "opção".

No caso de

utility -a b=c
  • -a e b=c são argumentos,
  • -a é uma opção se o utilitário o reconhecer como tal (o utilitário ln não tem -x , portanto -x não é uma opção para ln , estritamente falando, e ln -x acionaria uma mensagem de diagnóstico),
  • b=c é um argumento de opção se a opção -a receber um argumento, caso contrário, é um operando
  • b e c são opções não , argumentos de opção e não operandos em si mesmos.

Como você notou no meu texto acima, trabalhar com a 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 no comando linha. O manual indicará claramente quais opções aceitam os argumentos da opção e quais argumentos são operandos, etc.

Para chamar c , um "valor" é IMHO perfeitamente ok. Não é algo padronizado, mas poucos o interpretariam mal se você dissesse " c é o valor dado a b ". Ficaria claro a partir do contexto da utilidade em questão.

Por exemplo

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

Qualquer pessoa que saiba sobre awk dirá que -v var="d" significa que " o awk variable var está atribuído ao valor d na linha de comando ".

    
por 11.05.2017 / 12:34