为什么函数中的'getopts'无效?

Hin*_*dol 12 bash ubuntu

function readArgs() {
    while getopts "i:o:p:s:l:m" OPTION; do
        case "$OPTION" in
            i)
                input="$OPTARG"
                ;;
            o)
                output="$OPTARG"
                ;;
            ...
        esac
    done
}

readArgs

if [[ -z "$input" ]]; then
    echo "Not set!"
fi
Run Code Online (Sandbox Code Playgroud)

这始终是给我Not set!,但如果我注释掉线function readArgs() {,}并且readArgs,它的工作原理.为什么?

也,

input="$OPTARG"
echo "$input"
;;
Run Code Online (Sandbox Code Playgroud)

不起作用.

Mat*_*Mat 16

getopts正在解析readArgs函数的参数,并且您没有给该函数任何参数.

试试:

readArgs "$@"
Run Code Online (Sandbox Code Playgroud)


gle*_*man 8

getopts依赖于OPTIND被初始化为1 的变量

readArgs() { OPTIND=1; ...
Run Code Online (Sandbox Code Playgroud)

要么

readArgs() { local OPTIND; ...
Run Code Online (Sandbox Code Playgroud)