我正在编写一个 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 =