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。