解析在getopts中接受参数的选项

时间:2018-07-11 14:50:26

标签: bash getopts

我有以下程序foo,它可以带有三个可选标志fgs之一:

usage()
{
    echo "Use this correctly"
}

while getopts "fgs" opt; do
    case $opt in
        f)
          echo f
          foo="$OPTARG"
          echo $foo
          ;;  
        g) 
          echo g 
          foo="g"
          ;;  
        s)  
          echo s
          foo="s"
          ;;  
    esac
done

if [ -z "$foo" ]
then
   usage
   exit
fi

echo $foo
exit

当我执行foo -gfoo -s时,会得到预期的输出:

g
g

s
s

分别。但是当我做foo -f bar时,我期望

f
bar
bar

但是得到

f
Use this correctly

表示在$foo情况下未正确设置-f。我在做什么错了?

1 个答案:

答案 0 :(得分:3)

您必须替换

while getopts "fgs" opt; do

使用

while getopts "f:gs" opt; do

带有参数的选项必须后跟一个冒号。仅对于这些选项,getopts设置OPTARG变量。