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 设置为选项字符。