【发布时间】:2012-11-08 14:19:13
【问题描述】:
我有一个 C 程序,它期望使用多个选项和 1 个非选项参数(即没有关联的选项字母)调用,并使用 getopt 解析这些选项。例如,它可以被调用:
示例 1:
myProgram -a "aParam" -b "bParam" "xParam"
我一直在使用 SLES10,并且这些选项按任何顺序工作。例如,非选项参数“xParam”可以先出现:
示例 2:
myProgram "xParam" -a "aParam" -b "bParam"
但是,在 SLES11 中进行测试时,似乎 getopt 一到达非选项参数就停止处理,因此上面的示例 2 不起作用。
我已阅读 getopt 手册页,发现这可能是相关的:
如果 optstring 的第一个字符是 '+' 或设置了环境变量 POSIXLY_CORRECT,则一旦遇到非选项参数,选项处理就会停止。
我不确定 SLES11 是否默认设置 POSIXLY_CORRECT。 在 SLES11 中获取旧的 SLES10 getopt 行为的最佳方法是什么?
【问题讨论】:
-
在终端(unix 等)上输入
set以查看是否设置了 POSIXLY_CORRECT,也许? -
$ set | grep "POSIXLY_CORRECT"没有返回任何东西,所以可能没有设置。 -
也许
POSIX_ME_HARDER仍在使用中? -
您确定您的来源明确包含了
getopt.h吗? -
@WilliamMorris:
env比set更好地检查环境。