Bash 测试标志是否有参数

Bash 测试标志是否有参数,bash,getopts,Bash,Getopts,我分析命令行选项的典型设置是: CONF="" INPUT="" while getopts ":c:i:" FLAG; do case $FLAG in i) INPUT=$OPTARG;; c) CONF=$OPTARG;; \?) echo -e "\nInvalid option: -$OPTARG" usage;; :) echo -e "Option -$OPTARG requires an argument."

我分析命令行选项的典型设置是:

CONF=""
INPUT=""
while getopts ":c:i:" FLAG; do
   case $FLAG in
      i) INPUT=$OPTARG;;
      c) CONF=$OPTARG;;
      \?) echo -e "\nInvalid option: -$OPTARG"
         usage;;
      :) echo -e "Option -$OPTARG requires an argument."
         usage;;
   esac
done
if [ "$#" -eq 0 ]; then
    usage
fi
我正在寻找一种方法来捕获提供了有效标志但没有参数的情况,例如:

./Script.sh -c -i 
返回
用法
。我的印象是这一行:

:) echo -e "Option -$OPTARG requires an argument."
但是,当如上所述使用不带参数的标志运行脚本时,usage函数不会启动,echo也不会启动


我做错了什么?

如果使用
/script.sh-c-I-c
/script.sh-c
调用脚本,两者都将显示错误消息
选项-c需要参数。


但是,当调用
/script.sh-c-i
时,您正在为
-c
参数传递值“-i”,因此在参数解析结束时,您会得到
CONF=-c
输入未设置

啊,是的-当然。我猜这可能不容易解决?您可以通过检查OPTARG是否与另一个现有标志匹配来解决这一问题,但我很惊讶
getopts
本身并没有提供这一点。