Bash中getopts模板':x:y-:'末尾的'-'符号含义是什么?
关于getopts中
:x:y-:模板的含义解析 先拆解getopts ':x:y-:' val里每个部分的作用:
- 开头的
::开启静默错误模式。默认情况下,getopts遇到未知选项或选项缺少参数时会自动输出错误提示,加了这个:后,错误提示会被抑制,需要你在代码里自行处理(比如遇到未知选项时val会被设为?,选项缺参数时val设为:)。 x:和y::表示短选项-x和-y都必须携带参数。这里的:是标记该选项需要接收后续参数,比如执行脚本时得写-x 123或-y abc,参数会被存在OPTARG变量里。- 末尾的
-::这是用来兼容处理**长选项(--开头的选项)**的特殊语法:- 当命令行中出现
--foo或--bar=xxx这类长选项时,getopts会把val设为-,同时将长选项的内容(不带开头的--)赋值给OPTARG。比如--foo会让OPTARG等于foo,--bar=test会让OPTARG等于bar=test。 - 后面的
:表示这些长选项也可以携带参数,和短选项的:作用一致,支持--bar=test或--bar test两种传参形式。
- 当命令行中出现
举个简单的使用示例:
while getopts ':x:y-:' val; do case "$val" in x) echo "短选项-x的参数:$OPTARG" ;; y) echo "短选项-y的参数:$OPTARG" ;; -) # 处理长选项 case "$OPTARG" in help) echo "显示帮助信息" ;; output=*) file="${OPTARG#*=}" echo "输出文件路径:$file" ;; *) echo "未知长选项:--$OPTARG" ;; esac ;; :) echo "选项-$OPTARG 缺少参数" ;; \?) echo "未知短选项:-$OPTARG" ;; esac done
当执行./test.sh -x hello --output=result.txt时,会输出:
短选项-x的参数:hello 输出文件路径:result.txt
内容的提问来源于stack exchange,提问作者StudentOrint
相关产品推荐
相关产品推荐

