我试图写一个有限版本的ls w/一些选择。
然而,我陷入了以一种干净的方式从我的论点中解析出我的选择的问题。
例如:
$ ls -l -t somefile anotherFile
$ ls somefile -lt anotherFile
有同样的行为。
这给我带来了两个问题:
这使得使用argc有点困难。例如,我认为参数ls -ltls都有0个参数(命令名除外),但是argc将-l作为参数计算。
因此,天真地实现了:

if( argc == 1) {list all the contents of cwd}

不起作用。
是否有一种内置的方法来获得选项和选项计数,或者我必须滚动自己的函数?
我必须考虑所有不同的选项排列方式,并注意不要将选项混淆为文件名或目录名。似乎最干净的解决方案是从一开始就将选项与文件参数分开。有没有一种惯用的方法可以做到这一点/有没有标准的库调用可以做到这一点?

最佳答案

没有内置的参数解析帮助,但getopt是参数解析的“标准”方法。
对于简单的应用程序,我有时会使用以下内容来创建自己的应用程序:

int pos=0;
argc--;argv++;
while (argc > 0) {
  if (*argv[0]=='-') {
     switch ((*argv)[1]) {
       case 'l': //-l argument
         save_option_l(++argv);
         argc--; //we consumed one name
         break;
       //... other -options here ...
       default:
         usage("unrecognized option %s", *argv);
     }
   }
   else {
     save_positional_argument(argv,pos++);
   }
   argv++;
   argc--;
}

在本例中,我要求修饰符直接跟随标志。不要像第一个例子那样支持变量用法,除非有很强的理由这样做。

关于c - 在命令行程序中将选项与非选项参数分开,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50342378/

10-15 05:06
查看更多