getopt, getopt_long使用笔记

2024-04-23 19:28
文章标签 使用 笔记 long getopt

本文主要是介绍getopt, getopt_long使用笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

An element of argv that starts with '-' (and is  not exactly  "-" or "--") is an option element.

The characters of this element (aside from the initial '-') are option characters.

以'-’开头的字符(注意!不是字符串!!)就是命令行参数选项

通常通过在循环中调用 getopt 来解析命令行选项。每次调用时 getopt 会返回找到的下一个短选项,如果遇到无法识别的选项则返回 '?'。当没有更多短选项时它返回 -1,并且设置全局变量 optind 的值指向 **argv 中所有段选项之后的第一个元素。

  • optarg :表示当前选项的参数值

A legitimate option character  is  any  visible one  byte  ascii character that is not '-', ':', or ';'. 

If such a character is followed by a colon, the option requires an argument

getopt() places a pointer  to  the  following text  in  the  same  argv‐element, or the text of the following argv‐element, in optarg.

  • optind :表示的是下一个将被处理到的参数在 argv 中的下标值。
  • The variable optind is the index of the next element to be processed in argv.
  • The system initializes this value to 1. // 初始化值为1,下一次调用getopt时,从optind存储的位置重新开始检查选项。
  • argv[0]是函数名称,所有参数从argv[1]开始,所以optind被初始化设置指为1。
  • 当getopt()在while循环中使用时,循环结束后,剩下的字串视为操作数,在argv[optind]至argv[argc-1]中可以找到。

  • opterr :如果 opterr = 0,在 getoptgetopt_longgetopt_long_only 遇到错误将不会输出错误信息到标准输出流。opterr 在非0时,向屏幕输出错误

If  the  caller  has set the global variable opterr to zero, then getopt() does not print an error message.  The caller can determine that there was an error by testing whether the function return value is '?'. 

(By  default, opterr has a nonzero value.)// 初始化值为非0

  • optopt :存储了当前发现的无效选项字符。当 getopt 函数返回 '?' 以指示发现了无效选项时,检查 optopt 来获取该选项字符

By default, getopt() prints an error message on standard error, places the erroneous option character in optopt, and returns '?' as the function result.

// 当命令行选项字符不包括在optstring中或者选项缺少必要的参数时,该选项存储在optopt中, getopt返回'?’。

getopts命令支持两种错误报告模式,详细错误报告模式和抑制错误报告模式。在OPTSTRING之前加冒号是抑制错误报告模式 (:OPTSTRING); 不加是详细错误报告模式。

如果 optstring是以冒号开头:的,命令行当中出现了optstring当中没有的参数将不会提示错误信息。比如出现没有定义的-x不会报"option requires an argument -- x",需要脚本捕捉(:)。

 在命令行选项参数再也检查不到optstring中包含的选项时,返回-1。

错误的调用程序,要么是命令行选项无效,要么是缺少选项参数,正常情况下,getopt()会为这两种情况输出自己的出错信息,并且不区分的均返回’?’。可以采用以下两种方法来更改getopt()函数的出错信息输出行为:

在调用getopt()之前,将opterr设置为0, getopt()函数发现错误的时候强制不输出任何消息。

如果optstring参数的第一个字符是冒号,例如”:ngl:”,那么getopt()会保持沉默,并根据错误情况返回不同字符,如下:
            “无效选项” —— getopt()返回’?’,并且optopt包含了无效选项字符(这是正常的行为)。
            “缺少选项参数” —— getopt()返回’:’

如果optstring参数的第一个字符是冒号,例如”:ngl:”,那么getopt()会保持沉默,并根据错误情况返回不同字符,如下:

    “无效选项” —— getopt()返回’?’,并且optopt包含了无效选项字符(这是正常的行为)。
    “缺少选项参数” —— getopt()返回’:’

If  there  are no more option characters, getopt() returns -1.  Then optind is the index in argv of the first argv‐element that is not an option.

If  the  first character (following any optional '+' or '-' ) of optstring is a colon (':'), then getopt() likewise does not print an error message.  In addition, it returns ':' instead of  '?'  to  indicate  a missing option argument

在'+'指定的扫描模式下,getopt遇到第一个non-option parameter后,就停止解析,把在此之后的内容都作为non-option parameters;'-'指定的扫描模式下,getopt在遇到non-option parameters仍会继续解析,但会把non-option parameters保留在其原本的位置上,不会收集到输出的最后

If the first character of optstring is '+' or the environment variable POSIXLY_CORRECT is set, then option processing stops as soon as a nonoption argument is  encountered. 

If '+' is

这篇关于getopt, getopt_long使用笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/929671

相关文章

Python 字典 (Dictionary)使用详解

《Python字典(Dictionary)使用详解》字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力,:本文主要介绍Python字典(Dictionary)... 目录字典1.基本特性2.创建字典3.访问元素4.修改字典5.删除元素6.字典遍历7.字典的高级特性默认字典

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr