我有一个 bash 脚本,它可以接受各种不同格式的参数:
格式1:(myscript.sh value1 value2 [value3 value4] -p -g
在有参数的选项上没有开关/标志,对于没有参数的选项有开关,哪些字符串对应于哪些值,部分由给出的值的顺序决定,部分由字符串内容的正则表达式匹配决定)
格式 2:(myscript.sh -s value1 -t value2 [-v value3 -w value4] -p -g
标准选项带和不带参数格式,易于处理getopts
)
格式 3:myscript.sh --longopt value1....
等(标准的带和不带 args 的长选项格式)。
这是愚蠢的部分:语法可以组合:myscript.sh -p value1 value3 --longopt value4 -t value2 -g
应该是有效的,value1
并且value3
被正则表达式或相对于其他参数的位置检测到。
数十个团队以不同的方式使用此脚本,其中大多数是自动化的,每个人都希望保留与他们的使用方法的遗留兼容性。我有一个庞大的、丑陋的、完全手动的选项解析器来处理所有三种不同的语法。每次我需要添加一个选项并保持兼容性时,我都觉得我需要先喝一杯伏特加。
我的问题:
Bash/Unix 中是否有任何实用程序可以简单、清晰、健壮地解析像这样的选项语法?在这一点上,我的替代方案是继续使用手动解析器,或者只是在脚本中嵌入一堆 Python/optparse 代码并使用它。