使用C中的getopt()
函数,可以这样做:
program -a arg_for_a -b arg_for_b -c operand1 operand2
它没有问题。
但是,如何使它以这种方式工作?:
program operand1 operand2 -a arg_for_a -b arg_for_b -c
在这种情况下,每个参数(包括-a
,-b
等都被视为操作数。
我试图像gcc
或ssh
那样做:
gcc code.c -o executable
ssh user@host -i file.pem
也就是说,无论选项和操作数在什么位置,它们都被正确识别。
如何在任何地方正确识别选项,并且不遵循选项的每个单词都被识别为操作数?
答案 0 :(得分:3)
如果您使用GNU C库的getopt实现,那么它将像所有GNU实用程序一样工作,因为几乎所有它都使用它。特别是(引自man 3 getopt
):
默认情况下,getopt()会在扫描时置换argv的内容,以便最终所有非选择都在最后。
这与gcc
不完全相同。 gcc
关注可选和位置参数的相对顺序。 (例如,-l
在命令行中的位置会有所不同。)为此,您必须告诉GNU getopt
而不是置换参数。然后,每次getopt
报告它已完成时,optind
将具有下一个位置参数的索引(如果有的话)。然后,您可以使用该参数,增加optind
,然后继续使用getopt
,这将在下一个参数处继续。