Bash getops:允许,但不要求参数

Bash getops:允许,但不要求参数

我正在编写一个 bash 脚本,使用 getopts 解析选项,如下所示:

    #!/bin/bash

    while getopts ab: ; do
        case $opt in
          a) AOPT=1
             ;;
          b) BOPT=$OPTARG
             ;;
        esac
    done

我想让“-b”选项选择性地接受一个参数,但事实上,如果没有传递参数,getopts 会报错。我该如何实现呢?

谢谢!

答案1

您可以通过将冒号作为 optstring 的第一个字符来以静默模式运行 getopts。这可用于抑制错误消息。

来自 getopts 手册页:

If the first character of optstring is a colon, the  shell  variable specified  
by name shall be set to the colon character and the shell variable OPTARG shall 
be set to the option character found.

因此,类似下面的方法可能对你有用:

#!/bin/bash

AOPT="unassigned"
BOPT="unassigned"

while getopts :ab: opt ; do
  case $opt in
    a) AOPT=1
       ;;
    b) BOPT=$OPTARG
       ;;
    :) BOPT=
       ;;
  esac
done

echo "AOPT = $AOPT"
echo "BOPT = $BOPT"

一些例子:

rlduffy@hickory:~/test/getopts$ ./testgetopts -a -b Hello
AOPT = 1
BOPT = Hello
rlduffy@hickory:~/test/getopts$ ./testgetopts -b goodbye
AOPT = unassigned
BOPT = goodbye
rlduffy@hickory:~/test/getopts$ ./testgetopts -a -b
AOPT = 1
BOPT = 

相关内容