키 값 역직렬화 또는 이와 유사한 구현

키 값 역직렬화 또는 이와 유사한 구현

매개변수를 구현하는 최선의 방법이 궁금합니다 . $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

관련 정보