getopts 智能位置参数解析
选项
optstring
:要识别的选项字符如果一个字符后面跟一个冒号,那么该选项应该有一个参数,该参数应该用空格分隔。冒号(
:
)和问号(?
)不能用作选项字符。
每次调用它时,getopts
将下一个选项放在 shell 变量名中,如果名称不存在则初始化名称,以及要处理到变量 OPTIND
中的下一个参数的索引。每次调用 shell 或 shell 脚本时,OPTIND
都会初始化为 1
。
当一个选项需要一个参数时,getopts
将该参数放入变量 OPTARG
中。shell 不会自动重置 OPTIND
; 如果要使用一组新参数,则必须在同一 shell 调用内多次调用 getopts
之间手动重置。
遇到选项结束时,getopts
将以大于零的返回值退出。
OPTIND
设置为第一个非选项参数的索引,name 设置为 ?
。getopts
通常会解析位置参数,但如果在 args
中给出了更多的参数,则 getopts
会解析这些参数。
getopts
可以通过两种方式报告错误。如果 optstring
的第一个字符是冒号(:
),则使用静默错误报告。在正常操作中,遇到无效选项或缺少选项参数时,将打印诊断消息。
如果变量 OPTERR
设置为 0
,则即使 optstring
的第一个字符不是冒号,也不会显示错误消息。
如果看到无效选项,则 getopts
将 ?
放入 name
,如果不是静音,则打印错误消息并取消设置 OPTARG
。如果 getopts
是静默的,则找到的选项字符放在 OPTARG
中,并且不会打印诊断消息。
如果找不到必需的参数,并且 getopts
没有静音,则在 name
中放置一个问号(?
),取消设置 OPTARG
,并打印诊断消息。如果 getopts
是静音的,则在名称中放置冒号(:
),并将 OPTARG
设置为选项字符。