选项需要参数错误

时间:2014-03-13 15:27:19

标签: bash shell

我写了一个shell脚本来做某事。一切正常!我的代码的一部分是这样的,所以我可以传递选项和参数:

while getopts "a:b:c" opt
do
 case $opt in
  a) AA=$OPTARG ;;
  b) BB=$OPTARG ;;
  c) CC=$OPTARG ;;
 esac
done
shift $(expr $OPTIND - 1)

但现在我想添加一个选项,比如d,我不希望它使用任何参数,如下面的代码所示,但它以错误结束,抱怨{{1}似乎getopts不能这样做。

option requires an argument error -- d

那我该怎么办?如果我想要两种选项类型,一种可以接受论证,另一种不需要参数,通常的做法是什么?

2 个答案:

答案 0 :(得分:15)

:说明符中的getopts 不是分隔符。来自man getopts

  

如果一个字符后面跟一个冒号,那么该选项应该有一个参数,该参数应该用空格分隔。

因此,如果您想要一个不参数的选项,只需添加该字符即可。如果您希望它接受参数,请添加后跟:的字符。

答案 1 :(得分:0)

如果您在d "a:b:c:d"之后有冒号,就会发生这种情况。

你的代码示例中没有它,它接受-d没有参数就好了。

也许你在编写测试用例时将其取消了?发布的tag wiki第2步说“测试你的例子。确保它运行并仍然显示问题。不要刷掉它。”