computer_knowledge_notes/Software/文本转换/getopt.md

42 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#### 简介
分析命令参数,并将其转化为适当的格式。
要解析的内容一般是传入shell函数的参数解析的次序为从左到右。每个参数都是如下形式之一
- 短选项。其形式为"-"跟着一个字符,也可以多个短选项都跟在一个"-"后面。
- 长选项。其形式为"--"跟着一个字符串,如不会引起误解长选项名也可以缩写。
- 选项的参数。不以"-"开头且是之前选项的参数。
- 非选项参数。不以"-"开头且不是之前选项的参数,或者在"--"之后跟着的参数。若设置了环境变量POSIXLY_CORRECT或短选项字符串以"+"形状,当找到第一个非选项参数后剩下的部分也都是非选项参数。
每个参数都会生成输出。除了非选项参数,输出的次序和参数的次序是一致的。输出有两种模式:
- 兼容模式(非引用模式)。
- 引用模式。即保留空格、特殊字符和非选项参数。
当在shell脚本中处理输出时看起来是由不同元素组成的(在大部分shell语言里这些元素由shift命令逐个处理)。这在引用模式下是不完美的,因为包含空格和特殊字符的元素有可能在意外的位置被拆分。
#### 语法
```
getopt [options] [--] <optstring> <parameters>
getopt [options] <-o|--options> <optstring> [options] [--] <parameters>
# options和sptstring决定解析的方式
# parameters是要解析的内容
```
#### 选项
```
-a, --alternative # 允许以单个'-'开头的长选项。
-l, --longoptions <longopts> # 要识别的长选项(多字符)。长选项之间以逗号分隔,长选项之后跟一个冒号表示有一个参数,长选项之后跟两个冒号表示有一个可选参数。
-n, --name <progname> # 用于报错的名称
-o, --options <shortopts> # 要识别的短选项(单字符)。短选项之后跟一个冒号表示有一个参数,短选项之后跟两个冒号表示有一个可选参数。
-q, --quiet # 禁止报错
-Q, --quiet-output # 不生成正常的输出,但仍然报错
-s, --shell <shell> # 使用shell的引用约定
-T, --test # getopt版本检测
-u, --unquoted # 不要引用输出。注意空格和特殊字符在此模式下会受到严重破坏。
```