0

我对如何处理同类型的多个命令行参数感到困惑。我在网上看到了几个解决方案,但它们没有显示我在寻找什么:

我的命令行参数将是: myar -q test.a 1-s.txt 2-s.txt 3-s.txt 4-s.txt 5-s.txt

因此,所有这些文件名都需要作为 q 输入来处理。但是,当我尝试这样做时,只采用第一个。我已经尝试了以下方法,但它只选择了 test.a:

opt =  getopt(argc, argv, optString);
while (opt != -1) {
    switch (opt) {

         case 'q':
             globalArgs.filename = optarg;
             break;

有没有办法更好地做到这一点?我现在真的被困住了。

4

1 回答 1

1

您有多种选择:

  • 您的示例调用有一个-q选项,后跟多个文件名(非选项)参数。您使用q而不是q:作为getopt()选项字符串的一部分,并将文件名作为非选项参数处理。

  • 您要求用户-q在每个文件名前面重复 (so myar -q test.a -q 1-s.txt -q 2-s.txt -q 3-s.txt -q 4-s.txt -q 5-s.txt)。在选项解析循环中,您可以在optarg遇到它时处理它,或者将值存储在某种列表中以供以后处理。

  • 您使用getsubopt()并要求用户使用逗号分隔符 ( myar -q test.a,1-s.txt,2-s.txt,3-s.txt,4-s.txt,5-s.txt) 列出参数。

最常见的技术,并且可能适用于存档程序(从命令名称推断myar)是第一种技术:文件名只是非选项参数。

许多程序使用第二种技术。考虑或或选项cc。或者with (它指定要扫描的另一个 makefile - 是的,您可以在一次调用中拥有多个选项)。-l-I-Lmake-f-f

第三种技术更有可能对文件名以外的东西有用。文件名包含逗号的风险太大。不太可能sort实际使用getsubopt(),但其-k2n,2表示法是相似的。

于 2013-10-28T01:57:55.847 回答