LinuxBash,获取getopt默认参数

LinuxBash,获取getopt默认参数,linux,bash,shell,getopt,Linux,Bash,Shell,Getopt,我试图编写一个中等难度的bash程序,但不知何故,我无法解析命令行参数并使用getopt设置默认参数 Getopt不知何故忽略了可选参数,将它们设置在--(表示参数结束)之后 简单测试,其中需要l(列表): getopt -s bash -o l: -l list: -- -l test 产生: -l“测试”- 如果将l(列表)定义为可选,则输出为: getopt-s bash-o l::-l列表:---l测试 -l'--“测试” 我使用它作为基础,但在测试中,即使是这个脚本也不能按预期工作(

我试图编写一个中等难度的bash程序,但不知何故,我无法解析命令行参数并使用getopt设置默认参数

Getopt不知何故忽略了可选参数,将它们设置在--(表示参数结束)之后

简单测试,其中需要l(列表):

getopt -s bash -o l: -l list: -- -l test
产生:

-l“测试”-

如果将l(列表)定义为可选,则输出为:

getopt-s bash-o l::-l列表:---l测试

-l'--“测试”

我使用它作为基础,但在测试中,即使是这个脚本也不能按预期工作(将arga值设置为某个值会产生默认值)

OS:Linux,getopt-V=getopt来自util Linux 2.27

感谢您的帮助:)

查看手册页:

简单的短选项是一个“-”,后跟一个短选项字符。如果该选项具有所需的 参数,它可以直接写在选项字符之后,也可以作为下一个参数(即在命令行上用空格分隔)如果选项有可选参数,则必须直接写在选项字符(如果存在)之后

所以你想要

$ getopt -s bash -o l:: -l list:: -- -ltest
 -l 'test' --
同样,对于可选的长参数,必须以特定方式提供参数:

必需的

$ 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' --

IIRC getopts只适用于短选项,而不适用于长选项。该教程中的代码正在进行自己的解析,以遍历选项。关于这一点,几乎可以肯定的是,在SO(以及网站的其他部分)上有很多问题/答案/示例。感谢您指出手册中的相关部分。我看了手册,但似乎我浏览了一下,太长了。getopt在强制参数和可选参数之间的风格似乎有点不一致。看来我有了Idée修正,linuxland中所有支持长参数的程序都使用
program--param
谢谢你帮我澄清。我甚至没有注意到区别——这些天我没有做足够的bash来记住细节,而不经常键入
manfoo