对于没有长选项的可移植 shell 脚本,是否可以始终使用 getopt?

For portable shell scripts without long options, can getopt always be used?

我需要为许多平台编写 POSIX shell 脚本,并且刚刚发现其中至少有一个没有 getopts 但它确实有 getopt

是否到处都支持getopt?如果不是,哪里不是?

我没有 'long options'。我确实有不带参数的选项,其他选项带整数或字符串(通常是没有空格的路径)和其他位置参数(所有选项都放在选项后面,因为我以前依赖 getopts)。

只要不需要长选项,我能一直依赖getopt吗?如果没有,什么时候没有?

编辑:我从常见问题解答中读到一句话,关于我们应该如何忘记 getopt 甚至存在,但紧随其后的是 an answer which appeared to disprove the rationale for the quote

Stéphane Chazelas 写道(强调我的)“getopt 是一个传统命令,早在 Linux 发布之前就来自 System V。getopt 从来没有标准化。 POSIX、Unix 或 Linux (LSB) 的 None 曾标准化 getopt 命令。"

有没有办法对所有三个都使用 getopt?就像这三者共有的最小功能集?

谢谢!

反对 getopt 的论点是反对不是来自 util-linux 的版本(即来自给定 Bash FAQ link 的 "traditional versions of getopt")。

你 link 想要的答案错过了那个上下文(我几乎可以争辩说故意错过它,因为引用的片段 立即 在至关重要的上下文词之后开始 =28=]。然后是解释 "traditional" 在该上下文中的含义的句子。)

util-linux getopt 支持它们,传统的 getopt 不支持。这使得它完全不可移植。

除此之外,我不能说 getopt 的一般可移植性,但我希望它的基本功能可能几乎在任何地方都能工作(更重要的是,除非你知道你的代码将 运行 在 "obscure" 环境中它可能不会。

话虽这么说,应该完全可移植的非getopt 解决方案并不是特别复杂,应该能够处理您需要为其编写代码的所有内容。