测试标志是否有参数

Testing whether or not a flag has 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 

Returnsusage。我的印象是这一行:

:) echo -e "Option -$OPTARG requires an argument."

然而,当 运行 上面的脚本使用不带参数的标志时,使用函数没有触发,回显也没有触发。

我做错了什么?

如果您使用 ./script.sh -c -i -c./script.sh -c 调用脚本,两者都会显示错误消息 Option -c requires an argument.

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