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

2.2 KiB
Raw Blame History

简介

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

要解析的内容一般是传入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				# 不要引用输出。注意空格和特殊字符在此模式下会受到严重破坏。