13
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

这总是给我Not set!,但如果我注释掉这些行function readArgs() {}并且readArgs,它会起作用。为什么?

还,

input="$OPTARG"
echo "$input"
;;

不起作用。

4

2 回答 2

19

getopts正在解析函数的参数readArgs,而您没有给该函数任何参数。

尝试:

readArgs "$@"
于 2012-05-04T18:56:14.907 回答
8

getopts依赖于OPTIND被初始化为 1 的变量。要么做

readArgs() { OPTIND=1; ...

或者

readArgs() { local OPTIND; ...
于 2012-05-04T19:45:09.090 回答