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

Bash 解析在getopts中接受参数的选项,bash,getopts,Bash,Getopts,我有以下程序foo,可以使用三个可选标志之一,f,g,或s: usage() { echo "Use this correctly" } while getopts "fgs" opt; do case $opt in f) echo f foo="$OPTARG" echo $foo ;; g) echo g foo=

我有以下程序
foo
,可以使用三个可选标志之一,
f
g
,或
s

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-g
foo-s
时,我得到了预期的输出:

g
g

分别。但是当我做了
foo-f bar
我期待

f
bar
bar
但是得到

f
Use this correctly
表示在
-f
案例中未正确设置
$foo
。我做错了什么?

你必须更换

while getopts "fgs" opt; do

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

您必须替换

while getopts "fgs" opt; do

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

while getopts "f:gs" opt; do