2011-08-15 32 views
4

到目前为止,我一直在使用getopt_long来解析命令行C程序的选项。处理C中参数前后的命令行选项

有没有办法阻止getopt_long解析时,它遇到了非选项参数?如果没有,在C中处理这个问题的最好方法是什么?

举个例子,我想以同样的方式来处理命令git,并且命令之前有一般的参数,并在其后的特定命令的参数:

git [general options] <command> [command options] 

如:

git --bare commit -a 
git -p --bare status -s 

-p--bare是一般选项,并且可以与所有的命令使用,而-a是特定于commit命令,-s特定到status命令。

使用getopt_long将尝试首先解析所有选项,然后保留非选项参数。理想情况下,我希望一旦遇到非选项(即命令)就停止解析,然后将其余参数传递给特定于命令的选项解析器。

回答

6

的GNU的Getopt手册说:

POSIX要求的以下行为:第一个非选项阻止了选项处理。通过设置环境变量POSIXLY_CORRECT或使用加号('+')开始选项参数字符串来选择此模式。

+1

+1。有趣的是,这是如何出现在“Linux程序员手册”中的,即Linux手册页,而不是在“authorative”[Glibc手册]中(http://www.gnu.org/s/libc/manual/html_node/Getopt-Long- Options.html#的Getopt龙 - 选项)。 –

+0

谢谢,完美的作品。我一直盯着getopt_long文档来看太久,在'man getopt'上不够用! –