1

引数を「逐語的」としてスクリプトに渡そうとしています。問題は、引数が二重引用符で囲ま""れ、二重ダッシュ/二重ハイフンで始まること--です。

これは一例です

script.sh -f "--conf=bla"

私のスクリプトでは$*$@これを次のように変換します

-f --conf=bla

そして、これが到達したとき、getoptsこの情報を本来あるべき方法でデコードする方法はありません。

ちなみにこれは私のgetopts

foo()
{
    while getopts ":f:" vars
    do
            case ${vars} in 
                    f ) MYVAR=${OPTARG};;  
                    * ) Err; exit 1;;
            esac
    done
    shift $((OPTIND-1))
}

--conf=bla内部に保存したいのですがMYVAR、これを行う方法が見つかりません。明らかに、二重引用符が取り除かれる方法を制御できず、一般的に、テキストを逐語的にスクリプトに渡すことはできません。

どうすればこれを制御できますか?

4

1 に答える 1

1
$ cat t.sh
#!/bin/sh

foo()
{
        # unset OPTIND
        while getopts ":f:" vars
        do
                case ${vars} in
                        f) MYVAR=${OPTARG} ;;
                        *) echo "error"; exit 1 ;;
                esac
        done
        shift $((OPTIND-1))

        echo "\$MYVAR=[${MYVAR}]"
}

foo "$@"

.

$ ./t.sh -f "--conf=blah"
$MYVAR=[--conf=blah]

詳しく教えてください。

于 2014-03-12T08:00:10.817 に答える