Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用bash中的getopts覆盖无效选项消息_Bash_Shell - Fatal编程技术网

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

用bash中的getopts覆盖无效选项消息,bash,shell,Bash,Shell,我正在使用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

我正在使用
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
我的代码片段

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

如何实现所需的结果?

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

假设您需要两个短选项
-g
-r
,以下示例在传递
-x
时不会触发
非法选项
消息:

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

在bash中,可以在开始分析之前将OPTERR设置为0:

OPTERR=0
while getopts 'option string' opt; do
    echo    "opt    = $opt"
    echo    "OPTIND = $OPTIND"
    echo    "OPTARG = $OPTARG"
    echo    "OPTERR = $OPTERR"
done