【发布时间】:2014-10-07 22:39:11
【问题描述】:
我有一个脚本:
#!/bin/bash
i_flag=false
v_flag=false
while getopts ":i:v:" opt; do
case $opt in
i ) i_flag=true; echo $OPTARG;;
v ) v_flag=true; echo $OPTARG;;
\? ) echo Unknown option: -$OPTARG >&2; exit 1;;
: ) echo "Missing option argument for -OPTARG" >&2; exit 1;;
esac
done
echo $i_flag
echo $v_flag
当我在不设置任何选项的情况下运行它时:
# ./opts_script.sh -i -v
-v
true
false
我希望看到的是两个选项的输出,表明没有传递任何参数。但是,-i 选项将-v 作为其参数并将i_flag 变量设置为true。然后它将 v_flag 变量保留为 false,因为它没有将其视为一个选项。
我还使用了while getopts ":iv:" opts; do,因此-i 选项不会将下一个选项作为其参数。然而,这是不希望的,因为它允许取消设置选项;不是我想要的。
因此,我的问题是:是否可以确保所有提供的选项都有参数,并且如果没有提供参数,这些参数不是下一个选项?如果有,怎么做?
【问题讨论】: