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).