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
缺点
- 外部实用程序
- 无法处理传统版本中的空参数字符串或嵌入空格的参数
getopts
优点
- 可在任何 POSIX shell 中工作并且是可移植的
-a -b
与以下产品配合使用效果良好-ab