getopt 或 getopts(带有“s”)哪个更标准?

getopt 或 getopts(带有“s”)哪个更标准?

Linux 基金会标准实用程序列表包括getopts但不包括getopt。类似的对于公开组Posix 实用程序列表。

同时,维基百科的标准 Unix 命令列表包括getopt但不包括getopts。同样,Windows Subsystem for Linux(基于Ubuntu,基于Debian)也包括getopt但不包括getopts(而且它是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:~$ 

因此,如果我想选择一个对任何使用更标准的 Linux 发行版(例如 Debian、Red Hat、Ubuntu、Fedora、CentOS 等)之一的人来说最有信心的,我应该选择哪一个?

笔记:

感谢 Michael 和 Muru 解释内置与可执行文件。我刚刚偶然发现以及其中列出了 bash 内置函数。

答案1

which是错误的工具。getopts通常是也是一个内置的:

由于getopts影响当前的 shell 执行环境,因此通常作为 shell 常规内置提供。

~ 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

如果您使用的是 shell 脚本,则可以安全地依赖getopts.可能有其他原因偏向其中一方,getopts标准

也可以看看:为什么不用“哪个”呢?那该用什么呢?

答案2

我也更愿意getopts这样做getopt,原因如下:

getopt缺点

  1. 外部实用程序
  2. 无法处理传统版本中的空参数字符串或嵌入空格的参数

getopts优点

  1. 可在任何 POSIX shell 中工作并且是可移植的
  2. -a -b与以下产品配合使用效果良好-ab

相关内容