在bash中使用getopts覆盖无效选项消息

6
我正在使用getopts来跟踪给我的脚本提供的选项。然而,我希望能够检测到指定的选项是否无效。我可以做到这一点,但它总是会回显一条我没有编写的消息。
my.sh: illegal option -- x
Error: Invalid option was specified --

我想要实现的目标

Error: Invalid option was specified --

我的代码片段

while getopts g:r: option; do
        case $option in
                g) guesses=$OPTARG;;
                r) range=$OPTARG;;
                ?) echo "Error: Invalid option was specified -- $OPTARG";;
        esac
done

我该如何达到预期结果?
3个回答

5
假设你想要两个短选项和,下面的示例不会在传递时触发非法选项消息:
while getopts ":g :r" option; do
    case $option in
        g) guesses=$OPTARG;;
        r) range=$OPTARG;;
        ?) echo "Error: Invalid option was specified -$OPTARG";;
    esac
done

4
在bash中,在开始解析之前,您可以将OPTERR设置为0:
OPTERR=0
while getopts 'option string' opt; do
    echo    "opt    = $opt"
    echo    "OPTIND = $OPTIND"
    echo    "OPTARG = $OPTARG"
    echo    "OPTERR = $OPTERR"
done

4
通过在标志前添加 : ,我告诉 getopts 我想要控制不在我设置列表中的标志。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接