#### 简介

分析命令参数，并将其转化为适当的格式。

要解析的内容一般是传入shell函数的参数，解析的次序为从左到右。每个参数都是如下形式之一：

- 短选项。其形式为"-"跟着一个字符，也可以多个短选项都跟在一个"-"后面。
- 长选项。其形式为"--"跟着一个字符串，如不会引起误解长选项名也可以缩写。
- 选项的参数。不以"-"开头且是之前选项的参数。
- 非选项参数。不以"-"开头且不是之前选项的参数，或者在"--"之后跟着的参数。若设置了环境变量POSIXLY_CORRECT或短选项字符串以"+"形状，当找到第一个非选项参数后剩下的部分也都是非选项参数。

每个参数都会生成输出。除了非选项参数，输出的次序和参数的次序是一致的。输出有两种模式：

- 兼容模式(非引用模式)。
- 引用模式。即保留空格、特殊字符和非选项参数。

当在shell脚本中处理输出时，看起来是由不同元素组成的(在大部分shell语言里，这些元素由shift命令逐个处理)。这在引用模式下是不完美的，因为包含空格和特殊字符的元素有可能在意外的位置被拆分。

#### 语法

```
getopt [options] [--] <optstring> <parameters>
getopt [options] <-o|--options> <optstring> [options] [--] <parameters>
	# options和optstring决定解析的方式
	# 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				# 不要引用输出。注意空格和特殊字符在此模式下会受到严重破坏。
```

