我希望使用我的shell脚本调用长而短的命令行选项.
我知道可以使用getopts
,但像在Perl中一样,我无法用shell做同样的事情.
关于如何做到这一点的任何想法,以便我可以使用选项,如:
./shell.sh --copyfile abc.pl /tmp/
./shell.sh -c abc.pl /tmp/
在上面,两个命令对我的shell意味着相同的事情,但使用getopts
,我无法实现这些?
我希望使用我的shell脚本调用长而短的命令行选项.
我知道可以使用getopts
,但像在Perl中一样,我无法用shell做同样的事情.
关于如何做到这一点的任何想法,以便我可以使用选项,如:
./shell.sh --copyfile abc.pl /tmp/
./shell.sh -c abc.pl /tmp/
在上面,两个命令对我的shell意味着相同的事情,但使用getopts
,我无法实现这些?
可以考虑三种实现:
Bash builtin getopts
.这不支持使用double-dash前缀的长选项名称.它只支持单字符选项.
BSD UNIX 实现独立的 getopt
命令(这是 MacOS 使用的)。
GNU实现独立的getopt
. GNU getopt(3)
(由命令 getopt(1)
在Linux上使用)支持解析长选项.
其他一些答案显示了使用bash builtin getopts
模拟长期选项的解决方案.该解决方案实际上做了一个简短的选项,其字符是“ – ”.所以你得到“ – ”作为标志.然后随后任何东西变成OPTARG,并使用嵌套的case
测试OPTARG.
这很聪明,但有警告:
getopts
无法强制执行选择规范.如果用户提供无效选项,则无法返回错误.您必须在解析 OPTARG 时进行自己的错误检查. 因此,虽然可以编写更多的代码来解决长期选项缺乏支持的问题,但这是更多的工作,并且部分地违背了使用getopt解析器来简化代码的目的。