用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