不同参数的结果相同

时间:2017-12-01 10:30:54

标签: bash

我有一个奇怪的情况。对于不同的参数,我总是得到相同的结果

function test
{
  while getopts 'c:S:T:' opt ; do
    case "$opt" in
      c) STATEMENT=$OPTARG;;
      S) SCHEMA=$OPTARG;;
      T) TABLE=$OPTARG;;      
    esac
  done  
    echo "$STATEMENT, $SCHEMA, $TABLE"      
}

test -c CREATE -S schema1 -T tabela1
test -c TRUNCATE -S schema2 -T tabela2
test -c DROP -S schema3 -T tabela3

结果:

CREATE, schema1, tabela1
CREATE, schema1, tabela1
CREATE, schema1, tabela1

我的剧本失败了什么?

1 个答案:

答案 0 :(得分:2)

在bash中,您需要本地化$ OPTIND变量。

function test () {
    local OPTIND

否则它是全局的并且对getopts的下一次调用返回false(即处理的所有参数)。如果它们没有在函数外部使用,也可以考虑本地化其他变量。

您也可以将其设置为零。