如何获得以”字符开头的选项的值?
我正在为我开发的类似bash的
shell编写一个选项解析器.
尽管如此,为了与bash选项兼容,我必须阅读一些以”开头的选项,如下所示: ./42sh O autocd […] (手册页说这些选项将传递给内置shopt设置值设置). 问题是getopt_long()函数只返回以 – 或 – 开头的选项,如果它们不是唯一的那样.如果是,则bash将它们分别作为标准输入的别名和选项标记的结尾. 我如何用getopt_long()获得这种类型的选项?我自己要解析这些选项吗? 编辑:根据@jxh响应和man 3 getopt页面,我发现getopt和getopt_long安排** argv parameters数组来移动所有看似不是有效选项的参数 – 从他们的角度来看 – 在结束.所以,我在通常的代码之后编写了以下代码,获得了正常的选项(所有的建议和评论都非常感激): EDIT2:由于在循环的每次迭代中使用strdup()而导致内存泄漏. for(; optind < argc; ++optind) { const char *argv_copy = strdup(argv[optind]); if (argv_copy[0] == '+' && argv_copy[1] == 'O') { /* A deactivation parameter have been just found ! */ if (handle_shopt_options(shell_options,argv[optind + 1],DISABLE) == EXIT_FAILURE) { usage(argv[optind]); free_shell_options(shell_options); shell_options = NULL; } ++optind; } free(argv_copy); argv_copy = NULL; } 一些解释: > optind是argv索引,它告诉我们在下一次传递时将解析哪个参数.由于我们解析了所有getopt()视点的有效参数,并且由于getopt()在最后移动了所有非选项,我们将解析所有剩余的参数,包括我们感兴趣的参数. 一些评论: >只有在定义_GNU_SOURCE宏时,getopt_long()才可用. 解决方法
正如您在研究中指出的那样,您不能使用getopt_long来解析以开头的选项.
作为一种解决方法,您可以自己扫描argv [],然后创建一个新的参数向量,在您认为是原始argv []中的样式选项的每个参数前面替换–plus-.这个新数组应该由getopt_long解析. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |