【问题标题】:Bash getopts dropping last argumentBash getopts 放弃最后一个参数
【发布时间】:2012-03-06 14:43:17
【问题描述】:

所以,我正在尝试使用 bash 的内置 getopts 来处理参数处理,但我得到了一个奇怪的结果。这是我的测试脚本;

#!/bin/sh

HOST=
OWNER=
GROUP=

while getopts "h:o:g" OPTION;
  do
    case $OPTION in
    h)
      HOST=$OPTARG
      ;;
    o)
      OWNER=$OPTARG
      ;;
    g)
      GROUP=$OPTARG
      ;;
  esac
done

echo "$HOST - $OWNER:$GROUP"

然而,当我使用这个运行脚本时;

./test.sh -h test.host.com -o skittles -g whatever

我的最后一个参数永远不会被拉入或被丢弃。我的回声结果是;

test.host.com - skittles:
                         ^ where's my group value? O.o

有谁知道这是什么原因造成的?

谢谢。

【问题讨论】:

    标签: bash shell unix scripting getopts


    【解决方案1】:

    您似乎希望-g 有一个参数,但在您的选项声明中,没有与您的-g 相关的“:”。

    你应该有这个:

    h:o:g:
    

    【讨论】:

    • 谢谢小木!我不知道冒号必须成功每个选项。我错过的原因是因为这个例子我曾经尝试过。 rsalveti.wordpress.com/2007/04/03/…
    • bash getopt man page 中相当明确地说:“如果一个字符后跟一个冒号,则该选项应该有一个参数。”
    【解决方案2】:

    您的选项字符串在 g 之后缺少 :

    【讨论】:

    • 谢谢威廉!我很抱歉我不能接受这两个答案,因为它们显然都是正确的。尽管如此,我还是很感谢您的回应。
    猜你喜欢
    • 1970-01-01
    • 2014-03-30
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2014-05-23
    • 2016-03-10
    • 1970-01-01
    相关资源
    最近更新 更多