getopt()
, os argumentos não precisam ser esmagados contra a opção à qual eles se aplicam, eles simplesmente podem ser. Portanto, se -f
receber um argumento, ambos os seguintes serão válidos:
command -ffoo positional arguments
command -f foo positional arguments
O que você chama de "segunda interpretação" é, na verdade, muito, muito raro. Tanto quanto eu posso pensar agora, tar
e mt
são os únicos comandos existentes que funcionam dessa forma ... e, como você mencionou, jar
, mas isso é só porque ele emula tar
. Esses comandos processam argumentos de maneira muito diferente do padrão getopt()
-style. As opções nem são precedidas por -
! Eu não posso dizer com certeza por que isso raramente era usado, mas eu acho que é por causa do fato de que é mais difícil dizer quais opções combinam com quais argumentos. Por exemplo, se b
e d
receberem argumentos, mas a
, c
e e
não, você tem isso:
command abcde b-argument d-argument
... o que significa que enquanto você estiver compondo o comando, você deve olhar para o grupo de letras de opção, lê-lo novamente, lembrar quais opções você especificou requerem argumentos e escrever os argumentos na mesma ordem. O que sobre isso?
command adcbe b-argument d-argument
Opa, a opção d
obteve o b-argument
e vice-versa. Pior, se você ver:
command lmnop foo bar baz
... e você não está familiarizado com o comando, você não tem idéia de quais argumentos vão com quais opções. foo
, bar
e baz
podem ser argumentos para n
, o
, p
(e l
e m
não recebem argumentos) ou foo
e bar
podem ir com, digamos, m
e p
, enquanto baz
é um parâmetro posicional ... ou muitas outras combinações possíveis.