EDIT: Tem sido apontado que esse estilo é um GNU-ism, e que Unixes não baseados em GNU tendem a usar uma sintaxe de traço único (em particular, variantes do OS X e BSD).
Apesar do status de GNU-ism, muitos programas no estilo Unix recém-escritos usam este estilo:
--long-option
para nomes de opções longos,
-s
para opções curtas (um caractere),
-abc
para várias opções curtas sem argumentos (um caractere por opção).
- Opções com argumentos:
--long arg
ou --long=arg
para opções longas,
-s arg
, -sarg
ou (opcionalmente) -s=arg
para opções curtas. Isso pode ser combinado com outras opções curtas, desde que apenas a última tenha um argumento.
- A mesma opção "semântica" pode ter vários aliases, geralmente um curto (mais rápido para digitar) e um longo (mais fácil de lembrar).
Qualquer pessoa que use um shell Linux por um período de tempo deve estar familiarizado com esse estilo 1 , para que tenha o princípio de menos surpresa do seu lado. Permitir o agrupamento de várias opções curtas sem ser ambíguo com opções longas também é bom.
1 Por exemplo, alguns dos programas que utilizam este estilo (na minha máquina Linux): ls
, grep
, man
, sed
, bash
, etc. ( EDIT: estes são aparentemente GNU-ismos porém, máquinas BSD e OS X não use este estilo)
Existem várias bibliotecas que podem cuidar disso para você analisar (a mais conhecida é a implementação do getopt do GNU ), apenas sendo necessário especificar quais opções longas e curtas existem, se elas levam um argumento e o que fazer quando um opção encontrada. (E, claro, o que fazer com argumentos posicionais, ou seja, aqueles que não começam com -
e não são argumentos para as opções anteriores)
find
é um programa muito antigo (ou talvez mais provável: uma versão reescrita de um programa muito antigo) que não pode ser facilmente alterado para usar uma nova sintaxe de linha de comando. Muitos scripts quebrariam e muitos usuários acostumados à sintaxe antiga reclamariam. javac
provavelmente foi influenciado por gcc
e amigos, que também seguem uma sintaxe antiga por razões históricas.