我有一个需要使用的程序:
program parameter1 parameter2 -x1 -y
但是如果我这样做,我觉得它应该有效:
program -x1 -y parameter1 parameter2
或其组合。如果没有可怕的肮脏黑客,如何获得parameter1
和parameter2
?目前我有一个
while ((c = getopt (argc, argv, "x:y")) != -1){
/* do stuff */
}
循环可选参数,但其他参数呢?只看argv[1]
和argv[2]
似乎是错误的,因为它们可能在任何地方。
我确信有一个既定的解决方案。
答案 0 :(得分:2)
退出while
循环后,optind
指向第一个非选项参数。请查看getopt(3)
手册页:
If there are no more option characters, getopt() returns -1. Then optind is the
index in argv of the first argv-element that is not an option.
所以你的第一个非选项参数是argv[optind]
,依此类推。
while ((c = getopt (argc, argv, "x:y")) != -1){
/* do stuff */
}
param1 = argv[optind]
param2 = argv[optind+1]
getopt
将置换参数,以便即使对于第一个示例,这仍然是正确的,其中选项参数位于非选项参数之后的命令行上。