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

Parsing options that take arguments in 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 的情况下没有正确设置。我做错了什么?

你必须更换

while getopts "fgs" opt; do

while getopts "f:gs" opt; do

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