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.