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
我的剧本失败了什么?
答案 0 :(得分:2)
在bash中,您需要本地化$ OPTIND变量。
function test () {
local OPTIND
否则它是全局的并且对getopts
的下一次调用返回false(即处理的所有参数)。如果它们没有在函数外部使用,也可以考虑本地化其他变量。
您也可以将其设置为零。