You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多次使用getopts与case时函数二次调用不进循环问题咨询

问题原因

getopts 依赖内置变量 OPTIND 记录下一个待处理的参数位置,这个变量不会在函数执行结束后自动重置。第一次调用函数时,OPTIND 会被推进到参数列表的末尾;第二次调用时,getopts 直接判定没有剩余参数可处理,返回false,导致while循环无法执行。

修复方案

在函数开头手动将 OPTIND 重置为1,确保每次调用函数时,getopts 都从第一个参数开始解析:

function some_function() {
    OPTIND=1  # 重置参数索引
    if [[ "$#" -eq 0 ]]; then
        return 1
    else
        while getopts "s:td:" opt; do
            case $opt in
                s) echo 's';;
                t) echo 't';;
                d) echo 'd';;
                *) echo 'default';;
            esac
        done
    fi
}

内容的提问来源于stack exchange,提问作者Lupascu Gabriel Cristian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 20:20:54