[shell]在函数中使用getopts


[shell]在函数中使用getopts
 
以前在.bashrc中写过一个函数,里面使用了getopts, 但是奇怪的是,这个函数调用过一次后,就不能再次解析参数,后来经过查询,发现是OPTIND变量的问题, 原代码如下:
  www.2cto.com  
01
function stjob(){
02
    #unset OPTIND   
03
    while getopts ":rsd" opt; do
04
        case $opt in
05
            r ) echo $opt ;;
06
            s ) echo $opt ;;
07
            d ) echo $opt ;;
08
            \? ) echo "Usage stjob -d -s -r"
09
                        return ;;
10
        esac
11
    done
12
}
出问题的原因是,经过第一次调用后OPTIND的值保存在当前的回话里,而getopts是根据OPTIND来解析参数的,因为第二次调用stjob时,OPTIND已经有了值,就导致解析不正常了。所以为了保证解析正常,应该在解析前将OPTIND置零或者去掉这个变量。

相关内容

    暂无相关文章