Frage

Wie erhalte ich ein assoziatives Array aus einer Abfragezeichenfolge in Bash?- Versuchen:

#!/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]"
War es hilfreich?

Lösung

Im Folgenden sollte funktionieren:

generasacodicetagpre.

Erläuterung:

Ich unter Verwendung einer Kombination von awk-Befehlen, um zuerst die Zeichenfolge in einzelne Datensätze aufzuteilen, dann auf das Zeichen für das KV-Paar aufzuteilen.

Ich verwende hier Process-Substitution hier, andernfalls würde ich eine Kopie des Arrays füllen.

edit:

Verwenden einer globalen Variablen an das Haus-Array.

Andere Tipps

#!/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"

In obigem, 's/&/\n/g' ist ein sed Befehl, der jedes Vorkommen von ersetzt & mit einer neuen Zeile.Wir wenden dies an q0 sodass jede Parameterzuweisung in einer separaten Zeile steht.Anschließend werden die Parametrierungen in das eingelesen while Schleife.Um jede Aufgabe zu lesen, IFS== read key value wird eingesetzt. IFS== erzählt read das Gleichheitszeichen als Worttrennzeichen zu behandeln.Daher ist jede Aufgabe in zwei Wörter unterteilt:Der erste ist der Schlüssel und der zweite ist der Wert.Diese werden dann dem assoziativen Array zugeordnet querydict mit der Aussage querydict["$key"]="$value".

Fügen Sie es in eine Funktion ein

bash unterscheidet sich von den meisten modernen Programmiersprachen dadurch, dass seine Möglichkeiten zur Übergabe komplexer Daten an und aus Funktionen äußerst begrenzt sind.In der unten gezeigten Methode ist das assoziative Array querydict, ist eine globale Variable:

#!/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"

Einnahme @ John1024-Antwort Ich verwende es in einer Funktion, in der das assoziative Array nach Wert zurückgibt, einfach den Inhalt mithilfe der Array-Syntax ausdrucken:

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top