我试图编写一个中等难度的bash程序,但不知何故我无法解析命令行参数并使用getopt设置默认参数。
Getopt以某种方式忽略可选参数,在 - 之后设置它们,这表示参数结束。
简单测试,需要l(list):
getopt -s bash -o l: -l list: -- -l test
产地:
-l 'test' --
如果我将l(list)定义为可选,则输出为:
getopt -s bash -o l :: -l list :: - -l test
-l '' -- 'test'
我使用this example作为基础,但是在我的测试中,即使这个脚本也没有按预期工作(将arga值设置为某些东西总是产生默认值)。
操作系统:Linux,getopt -V =来自util-linux 2.27的getopt
任何帮助表示赞赏:)
答案 0 :(得分:4)
查看手册页:
一个简单的短选项是' - '后跟一个短选项字符。如果选项有必需 参数,它可以直接写在选项字符之后或作为下一个参数(即在命令行上用空格分隔)。 如果该选项具有可选参数,则必须在选项字符(如果存在)后直接写入。
所以你想要
$ getopt -s bash -o l:: -l list:: -- -ltest
-l 'test' --
同样,对于可选的long args,您必须以特定方式提供参数:
需要
$ getopt -s bash -o l: -l list: -- --list foo
--list 'foo' --
$ getopt -s bash -o l: -l list: -- --list=foo
--list 'foo' --
可选
$ getopt -s bash -o l:: -l list:: -- --list foo
--list '' -- 'foo'
$ getopt -s bash -o l:: -l list:: -- --list=foo
--list 'foo' --