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

Posted

技术标签:

【中文标题】在 C 中处理参数前后的命令行选项【英文标题】:Handling command line options before and after an argument in C 【发布时间】:2011-10-27 08:46:40 【问题描述】:

到目前为止,我一直在使用 getopt_long 来解析命令行 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 将首先尝试解析所有选项,然后将非选项参数留待处理。理想情况下,我希望在遇到非选项(即命令)后停止解析,然后将剩余的参数传递给特定于命令的选项解析器。

【问题讨论】:

【参考方案1】:

GNU Getopt 手册说:

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

【讨论】:

+1。有趣的是,它出现在 Linux 程序员手册(即 Linux 联机帮助页)中,但没有出现在“权威”Glibc manual 中。 谢谢,效果很好。我盯着 getopt_long 文档看太久了,看不到 man getopt

以上是关于在 C 中处理参数前后的命令行选项的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中处理命令行选项的最佳方法 [重复]

处理用户输入与显示数据------------(移位shift命令行参数选项)

CCF-命令行选项(模拟)

CSP 命令行选项(201403-3)

在 Python 中以前缀表示法处理命令行参数

CCF 201403-3命令行选项 (STL模拟)