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

getoptsOPTIND変数が 1 に初期化されることに依存します。

readArgs() { OPTIND=1; ...

また

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