getopts from man

command

1
getopts [optstring] [var name] [args]

instuction

getopts被用于shell外壳程序解析位置参数。 [optstring]中包含需被识别出的选项;如果一个字符后加了冒号,表示该选项需要有一个用空格分隔的参数。

:?不推荐用于选项名称。

每次getopts被执行的时候,getopts被告知一个shell参数[var name]。 如果[var name]不存在,则会初始化它,并且下一个参数的序号将被赋予OPTIND中处理。 当Shell或Shell脚本被
执行时,OPTIND被自动初始化为1; 在同一个shell多次调用getopts时,如果需要使用不同的参数,那么需要手动重置OPTIND

当处理完选项时,getopts会退出,并返回一个大于0的值。OPTIND将被设置为第一个非选项的参数, 而name被设置为?

getopts一般解析位置参数,但如果args中提供了更多的参数,那么getopts则会去解析args

getopts有两种方式报错。如果optstring的第一个字符是一个冒号, 那么将会采用静默报错。 普通操作模式时,诊断消息仅在遇到非法或缺少选项时,才会被打印。如果OPTERR被设置
0,即使optstring的首字符为:,也不会显示任何报错信息。

当发现一个非法选项时,getopts?赋值到[var name]中且在非静默时, 打印一条错误信息并释放OPTARG变量。如果getopts不是静默的,那么该选项字符会被赋值给OPTARG并不会
打印任何诊断消息。

如果没有发现需要的参数,且getopts是非静默的,那么[var name]会被赋值?OPTARG会被unset删除,并打印一条诊断消息。如果getopts不是静默的,那么:会被赋予[var name]
OPTARG被设置为该选项。

getopts当找一个选吸时,无论该选项是否指定,都会返回true。若解析完选项或遇到错误时,返回false。