Qual é o pacote mais padrão, getopt ou getopts (com um “s”)?

7

A fundação Linux lista de utilitários padrão inclui getopts , mas não getopt . Similar para a lista Open Group dos utilitários Posix.

Enquanto isso, lista de comandos Unix padrão da Wikipédia inclui getopt , mas não getopts . Da mesma forma, o Subsistema Windows para Linux (baseado no Ubuntu baseado no Debian) também inclui getopt mas não getopts (e é o Versão aprimorada do GNU ).

balter@spectre:~$ which getopt
/usr/bin/getopt
balter@spectre:~$ getopt -V
getopt from util-linux 2.27.1
balter@spectre:~$ which getopts
balter@spectre:~$ 
Então, se eu quiser escolher um que eu possa ser o mais confiante de que qualquer um usando uma das distribuições mais comuns do Linux (por exemplo, Debian, Red Hat, Ubuntu, Fedora, CentOS, etc.), qual devo escolher? / p>

Nota:

obrigado a Michael e Muru por explicar sobre o builtin vs executável. Eu tinha acabado de encontrar o este , que também lista listas básicas.

    
por abalter 14.05.2018 / 06:48

2 respostas

13

which é a ferramenta errada. getopts é geralmente também é incorporado :

Since getopts affects the current shell execution environment, it is generally provided as a shell regular built-in.

~ for sh in dash ksh bash zsh; do "$sh" -c 'printf "%s in %s\n" "$(type getopts)" "$0"'; done
getopts is a shell builtin in dash
getopts is a shell builtin in ksh
getopts is a shell builtin in bash
getopts is a shell builtin in zsh

Se você estiver usando um script de shell, poderá depender com segurança de getopts . Pode haver outros motivos para favorecer um ou outro, mas getopts é padrão .

Veja também: Por que não usar "qual"? O que usar então?

    
por 14.05.2018 / 06:55
1

Eu também preferiria getopts over getopt pelas seguintes razões:

GetOpt Cons

  1. Utilitário externo
  2. Não é possível manipular sequências de argumentos ou argumentos vazios com espaço em branco incorporado na versão tradicional

GetOpts Pros

  1. Funciona em qualquer shell POSIX e é portátil
  2. Funciona bem com "-a -b" e "-ab"
por 17.05.2018 / 13:19