O idioma mais comumente usado no Unix para separar os sinalizadores de linha de comando do restante dos argumentos é usar um traço duplo ( --
).
Se o utilitário usar a função da biblioteca C getopt()
(direta ou indiretamente), o traço duplo sinalizará o final das opções da linha de comando e getopt()
encerrará a análise da linha de comando.
Isso é do getopt(3)
manual no OpenBSD:
The interpretation of options in the argument list may be cancelled by the option ‘--’ (double dash) which causes getopt() to signal the end of argument processing and return -1.
É por isso que a maneira correta de excluir um arquivo chamado -f
é
$ rm -- -f
por exemplo.
É provável que seu shell implemente o comando getopts
(que geralmente é, mas nem sempre, um comando interno) com uma chamada para essa função de biblioteca.
IMHO, é bom saber como usar getopts
em scripts de shell e getopt()
em programas em C. Não é muito difícil e torna a vida muito mais fácil quando você escreve o código de análise da linha de comando do seu projeto.
Há também um getopt_long()
disponível em algumas bibliotecas C, para analisar "opções longas" ( --option=value
). Isso, no entanto, é uma extensão (sem trocadilhos).