选项需要参数错误

Dan*_*iel 7 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)
Run Code Online (Sandbox Code Playgroud)

但是现在我想添加一个选项,比如说d我不希望它使用任何参数,如下面的代码所示,但它以错误结束,抱怨option requires an argument error -- d似乎getopts不能这样做.

while getopts "a:b:c:d" opt
do
 case $opt in
  a) AA=$OPTARG ;;
  b) BB=$OPTARG ;;
  c) CC=$OPTARG ;;
  d) DD="ON" ;;
 esac
done
shift $(expr $OPTIND - 1)
Run Code Online (Sandbox Code Playgroud)

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

l0b*_*0b0 18

:getopts符是不是一个分隔符.来自man getopts:

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

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

  • 哇,太棒了,你们都明白了,即使我通过提供错误的示例代码提出错误的问题,你仍然可以弄清楚到底发生了什么,很酷! (3认同)