Uma opção longa pode ser abreviada arbitrariamente?

0

É uma opção longa que pode ser abreviada arbitrariamente como parte das convenções GNU para opções, ou algumas outras convenções / padrões, ou apenas fornecida por alguma função C especial?

Por exemplo, por que python e awk se comportam de maneira diferente?

$ python --version
Python 2.7.12
$ python --versio
Unknown option: --
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try 'python -h' for more information.

$ awk --version
GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
$ awk --versi
GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)

Obrigado.

    
por Tim 21.07.2017 / 17:50

1 resposta

5

É uma funcionalidade do GNU libc, a partir de a página de manual getopt_long :

Long option names may be abbreviated if the abbreviation is unique or is an exact match for some defined option.

Da mesma forma, a interface Argp do GNU libc também permite opções abreviadas (embora seja possível rejeitá-las, se um programa realmente se importa).

Como observado em Opções longas abreviadas no comando linha de xclip , xlib faz a mesma coisa, então xclock -dig -bri é o mesmo que xclock -digital -brief .

Eu não recomendaria fazer isso em scripts: sua chamada awk --ver seria ambígua se eles adicionassem awk --verbose .

O Python presumivelmente escreveu seu próprio analisador de argumentos, provavelmente para ser portável para sistemas que não usam o glibc. E eles não podem simplesmente pegar emprestado o glibc porque eles não estão usando a licença GNU GPL.

    
por 21.07.2017 / 19:44