0

我有一个 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 代码并使用它。

4

1 回答 1

2

你试过getopts吗?

while getopts "s:t" OPTION
do
     case $OPTION in
         s)
             VALUE1=$OPTARG
             ;;
                 t)
             VALUE2=$OPTARG
             ;;
             exit
             ;;
         ?)
                #Other stuff
     esac
done     
于 2012-06-27T15:10:53.573 回答