使用getopt函数解析是否有办法:
./prog -L -U
与:
相同./prog -LU
这是我的尝试(不工作):
while ((c = getopt(argc, argv, "LU")) != -1) {
switch (c) {
case 'L':
// L catch
break;
case 'U':
// U catch
break;
default:
return;
}
}
在这个简单的例子中只有2个参数,但在我的项目中需要6个参数的所有组合。例如:-L
或-LURGHX
或-LU -RG -H
等。
getopt()
可以处理吗?或者我必须编写复杂的解析器才能做到这一点?
答案 0 :(得分:2)
getopt
does seem capable of handling it,and it does
以下是一些示例,显示了此程序使用不同的参数组合打印的内容:
% testopt
aflag = 0, bflag = 0, cvalue = (null)
% testopt -a -b
aflag = 1, bflag = 1, cvalue = (null)
% testopt -ab
aflag = 1, bflag = 1, cvalue = (null)
答案 1 :(得分:2)
它的行为完全符合您的要求:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv)
{
int c;
while ((c = getopt(argc, argv, "LU")) != -1) {
switch (c) {
case 'L':
puts("'L' option");
break;
case 'U':
// U catch
puts("'U' option");
break;
default:
puts("shouldn't get here");
break;
}
}
return 0;
}
测试一下:
precor@burrbar:~$ gcc -o test test.c
precor@burrbar:~$ ./test -LU
'L' option
'U' option
precor@burrbar:~$ ./test -L -U
'L' option
'U' option
getopt()
is a POSIX standard function后面的POSIX "Utiltiy Syntax Guidelines",其中包括以下内容:
准则5: 当在一个' - '分隔符后面分组时,应该接受没有选项参数的选项。
答案 2 :(得分:2)
保存缺少的大括号,您的代码适用于我:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv) {
int c;
while ((c = getopt(argc, argv, "LU")) != -1) {
switch (c) {
case 'L':
// L catch
printf("L\n");
break;
case 'U':
// U catch
printf("U\n");
break;
default:
break;
}
}
return 0;
}
$ ./a.out -LU L U $ ./a.out -L L $