POSIX apenas diz (sobre opções de linha de comando mutuamente exclusivas em utilitários POSIX):
The use of conflicting mutually-exclusive arguments produces undefined results, unless a utility description specifies otherwise.
Algumas ferramentas de linha de comando possuem opções de linha de comando conflitantes (como as opções --silent e --verbose ). No caso de ambas as opções serem usadas ao invocar a ferramenta, se permitido, a última opção analisada (a última na linha) geralmente ganha.
O último de --blur e --detect seria usado. A documentação especificaria quais opções eram exclusivas.
Compare ls -l -1 com ls -1 -l , por exemplo.
Outras ferramentas simplesmente não permitem opções de linha de comando conflitantes, dando ao usuário uma mensagem de diagnóstico no fluxo de erro padrão e saindo com um código de saída diferente de zero quando tal situação ocorre.
Seu código seria um erro se --blur e --detect fossem usados.
Isso é feito em, e. cut que tem bandeiras conflitantes -b , -c e -f .
Algumas ferramentas podem fornecer um efeito diferente, dependendo do nome pelo qual é invocado. Assim, você poderia ter dois nomes (hard links) para sua ferramenta, um chamado detectface e outro chamado blurface . Estes seriam exatamente o mesmo binário, mas o programa determinaria qual nome foi invocado para descobrir qual operação executar.
Isso é comum no sistema em que algum shell se mascara como /bin/sh (um shell POSIX) e como ele mesmo (por exemplo, bash no Linux ou ksh no OpenBSD) e que alterna para o modo POSIX sh "quando chamado como sh , ou você pode ter um compilador que compila o código C e C ++ e o modo de comutadores, dependendo se ele é invocado como cc ou c++ , etc. (ambos gcc e clang isso).