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

相关文章

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队