多次使用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
相关产品推荐
相关产品推荐

