在C中的参数之前和之后处理命令行选项

Dav*_*lis 4 c command-line getopt command-line-arguments

到目前为止,我一直在使用getopt_long解析命令行C程序的选项.

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

举个例子,我想以类似于git的方式处理命令,并在命令之前有一般参数,在它之后有特定于命令的参数:

git [general options] <command> [command options]
Run Code Online (Sandbox Code Playgroud)

例如:

git --bare commit -a
git -p --bare status -s
Run Code Online (Sandbox Code Playgroud)

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

使用getopt_long将首先尝试解析所有选项,然后保留要处理的非选项参数.理想情况下,一旦我点击非选项(即命令),就会停止解析,然后将剩余的参数传递给特定于命令的选项解析器.

Hen*_*olm 6

GNU Getopt手册说:

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