【问题标题】:Parsing options that take arguments in getopts解析在 getopts 中接受参数的选项
【发布时间】:2018-07-11 14:50:25
【问题描述】:

我有以下程序 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 的情况下没有正确设置。我做错了什么?

【问题讨论】:

    标签: bash getopts


    【解决方案1】:

    你必须替换

    while getopts "fgs" opt; do
    

    while getopts "f:gs" opt; do
    

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

    【讨论】: