标签:
当你想用一种专业的方式解析命令行参数时,getopts就是要选择的工具。和它的旧版本兄弟命令getopt不同(注意没有s!),getopts是shell内置命令。高级地方表现在
一些其他解析位置参数的其他方法(不用getopt(s))在这里介绍了: 如何处理位置参数.
注意getopts不能解析GNU风格的长选项(–myoption)或XF86风格的长参数(-myoption)!
需要先了解一下我们这里探讨的事情,所以让我们来看一个范例… 来看一下下面这行命令:
mybackup -x -f /etc/mybackup.conf -r ./foo.txt ./bar.txt
所有这些都叫位置参数,但是你可以把他们分成一些逻辑组:
让你体会一下为什么getopts很有用: 上面的命令可以像这样读取…
mybackup -xrf /etc/mybackup.conf ./foo.txt ./bar.txt
…使用自己的代码去解析很困难。而getopts可以认出所有常见的选项格式。
选项标识可以有大小写,也可以是数字。甚至是其他可识别字符,但是并不推荐这么做(可用性差而且特殊字符可能会出问题)。
一般你需要调用getopts好几次。每次会使用"下一个"位置参数(和一个可能的内容摘要),如果解析成功,会给你返回结果。getopts不会改变位置参数的设定 —— 如果你想要shift掉参数,你必须手工处理:
shift $((OPTIND-1))
# now do something with $@
因为getopts在没有要解析的参数剩余时会返回退出状态FALSE,所以可以很容易的在while循环使用:
while getopts ...; do
...
done
getopts将会解析选项和他们可能的参数。遇到第一个非选项的参数时将会停止解析(一个不以连字符(-)开头的字符串,这不是前面任何一个选项的参数)。同样也会在看到–(双连字符)时停止解析,因为这个含义是选项终止。
(oschina的markdown不支持表格?那就凑或着看吧)
|变量|描述|
|——–|——–|
|OPTIND|保存下一个要解析的参数的指针。这就是getopts如何"记住"自己的状态和回调请求。同样可以用于在getopts处理过之后shift掉位置参数。OPTIND初始为1, 如果你想要再次使用getopts解析任何参数时需要重新设置为1|
|OPTARG|这个变量设置为被getopts发现的选项的参数。同样包含了未知的选项标记|
|OPTERR|(Values 0 or 1) Indicates if Bash should display error messages generated by the getopts builtin. The value is initialized to 1 on every shell startup - so be sure to always set it to 0 if you don‘t want to see annoying messages!|
getopts also uses these variables for error reporting (they‘re set to value-combinations which arent possible in normal operation).
getopts简易教程(Small getopts tutorial)译文(未完成)
标签:
原文地址:http://my.oschina.net/abcfy2/blog/373955