如何使用带有unix shell函数的getopts?

时间:2014-05-31 22:31:57

标签: bash shell unix getopts

getopts命令似乎不适用于函数。也许我做错了什么。下面的代码就是我现在拥有的代码。如果我把整个while循环放在函数外面它是有效的。我想知道是否有办法使getopts与函数一起工作?我是shell脚本的新手。任何帮助将不胜感激:)

getOptions()
{
    while getopts :al:f:vd opt; do
            case "$opt" in
                    l) logFile = $OPTARG ;;
                    f) fileTable = $OPTARG ;;
                    v) verbose = 1 ;;
                    d) set -x ;;
                    a) echo "a";;
                    \?) echo "Invalid option: -$opt";;
            esac
    done
    shift $(($OPTIND - 1))
}

1 个答案:

答案 0 :(得分:3)

一个原因可能是您在使用logFile = $OPTARG之类的内容时不应该使用logFile=$OPTARG

另一个原因是$ 1,$ 2等都是指函数的参数,而不是shell脚本的参数。由于shell以这种方式工作,并且getopts使用$ 1,$ 2等,你使用函数的getopts参数,而不是脚本的参数。换句话说,将选项处理限制在shell函数中并不是一个好主意。