我试图使用getopts运行以下脚本来解析这些选项,但它似乎不起作用:
#!/bin/bash
set -x
echo $@
while getopts "rf" opt
do
case "${opt}" in
r)
ropt=${OPTARG}
;;
f)
fopt=${OPTARG}
;;
esac
done
shift $((OPTIND -1))
echo $fopt $ropt我得到的输出是:
$ ./myscript.sh -f opt2 -r opt1
+ echo -f opt2 -r opt1
-f opt2 -r opt1
+ getopts rf opt
+ case "${opt}" in
+ fopt=
+ getopts rf opt
+ shift 1
+ echo
+ set +x你对我做错了什么有什么想法吗?
发布于 2018-12-12 10:40:34
您希望您的选项采用选项-参数,但您不会让getopts知道这一点。
你应该用
while getopts "r:f:" opt; do ...; done也就是说,接受参数的每个选项都应该在参数字符串中包含:到getopts。
您可能还希望在最后有一个默认的case分支来处理无效选项:
*) usage >&2
exit 1(错误消息(关于无效选项或缺少选项参数)将由getopts本身显示,usage是您定义的一个函数,它将向标准输出输出一条简短的帮助消息。
另外,不要忘记引用所有的扩展,甚至是$(( OPTIND - 1 ))。
与最后一点有关:
https://unix.stackexchange.com/questions/487548
复制相似问题