문제

어떻게 연관 배열을 쿼리에서 문자열에 Bash?-도:

#!/usr/bin/env bash

# Querystring (implementation stolen from http://stackoverflow.com/q/3919755)

function populate_querystring_array ()
{
    param="$1"
    query_dict="$2"
    #for i in "${array[@]}"; do IFS="=" ; set -- $i; query_dict[$1]=$2; done

    for ((i=0; i<${#param[@]}; i+=2))
    do
        query_dict[${param[i]}]=${param[i+1]}
    done
}

q0='email=foo@bar.com&password=dfsa54'
declare -A querydict
populate_querystring_array "$q0" "$querydict"
printf "$querydict[email]"
도움이 되었습니까?

해결책

아래가 필요합니다 :

#!/bin/bash

function qrystring() {
    qry=$1

    while read key value; do
        arr+=(["$key"]="$value")
    done < <(awk -F'&' '{for(i=1;i<=NF;i++) {print $i}}' <<< $qry | awk -F'=' '{print $1" "$2}')
}

q='email=foo@bar.com&password=dfsa54'
declare -A arr

qrystring "$q"

for k in ${!arr[@]}; do
    echo "$k -> ${arr[$k]}"
done
.

설명 :

문자열을 먼저 개별 레코드로 분할하여 문자열을 먼저 분할 한 다음 KV 쌍에 대한= 로그인에서 분할합니다.

프로세스를 사용하고 있습니다. 여기에서는 여기에서는 여기서는 배열의 사본을 채우고 있습니다.

편집 :

전역 변수를 하우스 배열로 사용합니다.

다른 팁

#!/usr/bin/env bash
q0='email=foo@bar.com&password=dfsa54'
declare -A querydict
while IFS== read key value
do
    querydict["$key"]="$value"
done < <(echo "$q0" | sed 's/&/\n/g' )
printf "${querydict[email]}\n"

에 위 's/&/\n/g'sed 명령을 대체하는 모든이 발생 & 새로운 라인입니다.우리는 이것을 적용 q0 그래서 모든 매개 변수를 할당은 별도의 줄에.매개 변수 지정은 다음으로 읽 while 루프입니다.을 읽을 각 할당 IFS== read key value 사용됩니다. IFS==read 을 치료하기 등으로 단어를 구분 기호입니다.따라서,각 할당으로 나누어져 두 단어:첫 번째는 열쇠 그리고 두 번째는 값입니다.이러한 다음에 할당된 배열 querydict 문의 querydict["$key"]="$value".

에 넣어 기능

bash 다르에서 가장 현대적 프로그래밍 언어에는 시설을 전달하기 위한 복잡한 데이터의 기능은 매우 제한적이다.방법은 아래와 같다,배, querydict, 글로벌 변:

#!/usr/bin/env bash
declare -A querydict
populate_querystring_array () {
    query="$1"
    while IFS== read arg value
    do 
        querydict["$arg"]="$value"
    done < <(echo "$query" | sed 's/&/\n/g' )
}

q0='email=foo@bar.com&password=dfsa54'
populate_querystring_array "$q0"
printf "${querydict[email]}\n"

@ john1024 님의 답변을 사용하여 연관 배열을 값별로 반환하는 함수에서 사용합니다.

를 사용하여 내용을 인쇄하기 만하면됩니다.
function parseQuery {
    local querystring="$*"
    echo -n "("
    echo "${querystring}" | sed 's/&/\n/g' | while IFS== read arg value
    do
        echo -n "[${arg}]='${value}' "
    done
    echo ")"
}

declare -A querydict=$(parseQuery "${QUERY_STRING}" )
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top