キー値の逆シリアル化または同様の実装

キー値の逆シリアル化または同様の実装

パラメータを実装する最善の方法が気になります。$xつまり$7、パラメータが豊富な関数の最後のパラメータを意味します。これは、「より多くのパラメータの追加を停止するためにここにさまざまなコアデータを入力する」の役割を果たしますか?可能な呼び出しは次のとおりですafunction param1 param2 ... "MYDATA=1 OTHERDATA=true"。一部のデータに対して複数の単純なトークンを関数に渡す必要があり、位置引数を保持する必要はありません。特に、一部のトークンはオプションであり、関数署名の固定位置に割り当てることができないためです。

修正する: Zshソリューションの例はafunc ...normal parameters... "MYDATA:1:OTHERDATA:2:"次のとおりですlocal mydata="${7/(#b)*MYDATA:([^:]#):*/$match[1]}"。複雑なパターンコードを隠す関数を書くことができ、次のように動作しますget_key "$7" "MYDATA"; local mydata=$REPLY。このソリューションはうまくいきますが、実際にこれを調べて、特定の方法に最も適したまたは便利なソリューションを見つけたいと思います。

ベストアンサー1

ループを使用して(残り)パラメータを処理しますshift。型パラメータの場合は、KEY=VALUE次のようになります(bashから)。

function foo {
    shift      # handle the first "fixed" arg  
    while [ -n "$1" ] ; do
        key=${1%%=*}
        val=${1#*=}
        echo "key: $key value: $val"
        shift   
    done    
}              
foo first MYDATA=2 OTHERDATA=false

あるいは、(bash 組み込み) を使用してスタイルフラグをgetopts解析することもできます。-x

function bar {
    OPTIND=3   # skip first two args
    local opt
    while getopts "ab:" opt; do
        if [ "$opt" = "a" ] ; then
            echo flag -a encountered
        elif [ "$opt" = "b" ] ; then
            echo flag -b with arg $OPTARG
        fi
    done
}

bar fixed args -a -b foo

おすすめ記事