首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何允许任意顺序的非选项参数获取?

如何允许任意顺序的非选项参数获取?
EN

Stack Overflow用户
提问于 2012-11-08 14:19:13
回答 1查看 1.4K关注 0票数 4

我有一个C程序,它需要使用几个选项和一个非选项参数(即没有关联的选项字母)来调用,并使用getopt解析这些选项。例如,可以用以下方式调用它:

Example1:myProgram -a "aParam" -b "bParam" "xParam"

我一直在使用SLES10,这些选项可以按任何顺序工作。例如,非选项参数"xParam“可以放在第一位:

Example2:myProgram "xParam" -a "aParam" -b "bParam"

但是,当在SLES11中进行测试时,似乎getopt在到达非选项参数时就停止了处理,因此上面的示例2无法工作。

我已经阅读了getopt手册页,并看到这可能是相关的:

如果optstring的第一个字符是'+‘或者设置了环境变量POSIXLY_CORRECT,那么当遇到非选项参数时,选项处理就会停止。

我不确定SLES11是否默认设置POSIXLY_CORRECT。在SLES10中获取旧的SLES11 getopt行为的最佳方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-15 20:46:12

结果是,默认情况下,它是重定向到_posix_getopt(),这导致了我前面描述的行为。

最后,我找到了可能的解决办法:

  1. 使用getopt_long()代替。这似乎没有posix的等价物。
  2. 定义_GNU_SOURCE,它停止重定向。
  3. 手动重新排序参数,可能使用包装外壳脚本。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13290788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档