首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getopts似乎不起作用

getopts似乎不起作用
EN

Unix & Linux用户
提问于 2018-12-12 10:36:36
回答 1查看 4.8K关注 0票数 4

我试图使用getopts运行以下脚本来解析这些选项,但它似乎不起作用:

代码语言:javascript
复制
#!/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

我得到的输出是:

代码语言:javascript
复制
$ ./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

你对我做错了什么有什么想法吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-12-12 10:40:34

您希望您的选项采用选项-参数,但您不会让getopts知道这一点。

你应该用

代码语言:javascript
复制
while getopts "r:f:" opt; do ...; done

也就是说,接受参数的每个选项都应该在参数字符串中包含:getopts

您可能还希望在最后有一个默认的case分支来处理无效选项:

代码语言:javascript
复制
 *) usage >&2
    exit 1

(错误消息(关于无效选项或缺少选项参数)将由getopts本身显示,usage是您定义的一个函数,它将向标准输出输出一条简短的帮助消息。

另外,不要忘记引用所有的扩展,甚至是$(( OPTIND - 1 ))

与最后一点有关:

票数 10
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/487548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档