首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash getopts命令

Bash getopts命令
EN

Stack Overflow用户
提问于 2012-03-27 05:40:07
回答 2查看 5.5K关注 0票数 3

我在他们的网站上学习IBM的例子:

(清单#5) http://www.ibm.com/developerworks/library/l-bash-parameters/index.html

代码语言:javascript
复制
#!/bin/bash
echo "OPTIND starts at $OPTIND"
while getopts ":pq:" optname
  do
    case "$optname" in
      "p")
        echo "Option $optname is specified"
        ;;
      "q")
        echo "Option $optname has value $OPTARG"
        ;;
      "?")
        echo "Unknown option $OPTARG"
        ;;
      ":")
        echo "No argument value for option $OPTARG"
        ;;
      *)
      # Should not occur
        echo "Unknown error while processing options"
        ;;
    esac
    echo "OPTIND is now $OPTIND"
  done

我想要的就是有一个名称超过1个字母的选项。ie -pppp和-qqqq而不是-p和-q。

我已经写好了我的程序,实现-help给我带来了一个问题……

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-27 06:46:19

对于传统的shell命令,-help等同于-h -e -l -p,因此如果您使用getopts解析"-help“,它会将其视为四个单独的参数。因此,您不能让多个字母的参数仅以单个连字符为前缀,除非您希望自己完成所有解析。按照惯例,不只是单个字符的选项(也称为“长选项”)前面有两个破折号,以使内容明确。

帮助文本的约定是同时支持-h--help

不幸的是,builtin不支持长选项,但是在所有常见的getopts发行版上都有一个单独的getopt实用程序,可以使用它来支持长选项。

There's more discussion of the topic in this answer

票数 8
EN

Stack Overflow用户

发布于 2012-03-27 11:22:58

上面的是对的。getopt实用程序支持长选项,而您可以使用--option。也许你可以试试这个。

代码语言:javascript
复制
#!/bin/bash
args=`getopt -l help :pq: $*`
for i in $args; do
    case $i in
    -p) echo "-p"
        ;;
    -q) shift;
        optarg=$1;
        echo "-q $optarg"
        ;;
    --help)
        echo "--help"
        ;;
    esac
done
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9880261

复制
相关文章

相似问题

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