A mensagem de uso impressa com, por exemplo,
command -?
de um comando Unix vá para stderr ou stdout, e por quê? Ele deve ir para o mesmo local se o usuário cometer um erro com uma opção?
touch -- -l; ls -?- você realmente recebe uma lista longa como se tivesse passado -lpara ls.
-hopção para outra coisa que não seja uma mensagem de ajuda, então '-?'(com as aspas) ou -:dê uma boa chance de receber uma mensagem de erro (e uso) desde :e ?não pode ser opções válidas para qualquer coisa usando getopt(3).