我需要为许多平台编写POSIX shell脚本,并且发现其中至少有一个没有getopts
但它确实有getopt
。
到处都支持getopt
吗?如果不是,它在哪里?
我没有任何“长期选择”。我确实有不带参数的选项,其他带整数或字符串的选项(通常是没有空格的路径)和其他位置参数(所有这些都放在选项之后,因为我以前依赖getopts
)。
只要我不需要长期选择,我是否可以始终依赖getopt
?如果没有,何时不?
编辑:我在常见问题解答中读到了一条引文,内容是关于我们应该忘记getopt
是否存在,但后面是an answer which appeared to disprove the rationale for the quote。
StéphaneChazelas写道(强调我的)“getopt
是一个传统的命令,它早在Linux发布之前就来自System V. getopt
从未标准化。没有POSIX,Unix或Linux(LSB)曾对getopt
命令进行了标准化。“
有没有办法在这三个上使用getopt
?就像这三个共同的最小特征集一样?
谢谢!
答案 0 :(得分:1)
反对getopt
的论据是针对不是来自util-linux的版本(即来自给定Bash FAQ链接的“getopt
的传统版本”)。
你所关联的答案错过了上下文(我几乎认为故意错过了它,因为引用的片段在关键重要的上下文词“传统”之后立即开始。并且遵循解释内容的句子在这种情况下,“传统”意味着。)
util-linux getopt支持它们,传统的getopt不支持它们。这使得它完全不可移植。
除了getopt
之外,我不能谈论getopt
的一般可移植性,但我希望它的基本功能可能几乎适用于所有地方(除非你知道你的代码将继续运行,否则它将更加重要)模糊的“环境可能不会发生。”
据说非完全可移植的非git merge
解决方案并不是特别复杂,应该能够处理您编写代码所需的一切。