2017-01-13 51 views
4

为什么此选项仅在第一次使用时才起作用,然后在其他时间忽略?这就像它在不使用该选项时被重置。为什么getopts只能在第一次使用?

这里是我的功能:

testopts() { 
    local var="o false" 
    while getopts "o" option; do 
     case "${option}" in 
      o) 
       var="o true" 
       ;; 
     esac 
    done 
    echo $var 
} 

当运行它,它传递的第一次选择时只返回true。

$ testopts 
o false 
$ testopts -o 
o true 
$ testopts -o 
o false 

回答

3

你需要在你的函数的顶部添加此行:

OPTIND=1 

在外壳的功能,否则连续调用不会重置此回,因为函数在正在运行每次都是一样的外壳。

help getopts

每次被调用时,getopts将放置在 shell变量$name下一个选项,初始化名称,如果不存在的话,和 下一个参数的索引被加工成壳体 变量OPTINDOPTIND初始化为1每次shell或 shell脚本被调用。

+1

谢谢!将在2分钟内接受 –

相关问题