GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash-Scripting – Assoziatives Array mit Beispielen erklärt

Dies ist der zweite Artikel im Rahmen von Bash-Arrays. Im vorherigen Artikel haben wir besprochen, wie man mit indizierten Arrays in Bash arbeitet . In diesem Leitfaden werden wir über Bash Associative Array sprechen ausführlich mit Beispielen in Linux.

Assoziative Arrays funktionieren basierend auf Schlüssel-Wert-Paaren. In einigen Sprachen wird es auch Wörterbücher genannt oder Hashmaps . Der Hauptunterschied zwischen indizierten und assoziativen Arrays besteht darin, dass indizierte Arrays auf der Grundlage des Indexwerts arbeiten und jedes Element im Array einer bestimmten Indexposition des Arrays zugeordnet wird. Ein assoziatives Array verwendet einen "Schlüssel" um den Wert anstelle von Indexpositionen abzubilden.

Lassen Sie uns eintauchen und sehen, wie man assoziative Arrays in Bash verwendet.

Assoziatives Array initialisieren

Im Gegensatz zu einem indizierten Array können Sie ein assoziatives Array nicht initialisieren, ohne declare zu verwenden Befehl.

Verwenden Sie das declare Befehl mit -A Flagge.

$ declare -A STAR_PLAYERS=()

Jetzt ein leeres Array namens "STAR_PLAYERS" geschaffen. Wenn Sie möchten, können Sie dem Array auch direkt während der Initialisierung Elemente hinzufügen.

$ declare -A STAR_PLAYERS=( [Argentina]="Messi" [Brazil]="Neymar" [England]="Kane" )

Im obigen Code stehen die Schlüssel in eckigen Klammern und auf die Werte sollte ein Gleichheitszeichen ohne Leerzeichen folgen. Es ist nicht erforderlich, ein Komma oder Semikolon als Trennzeichen zwischen Elementen zu verwenden.

Zur besseren Lesbarkeit können Sie die Array-Elemente über mehrere Zeilen schreiben.

$ declare -A STAR_PLAYERS=(
 [Argentina]="Messi"
 [Brazil]="Neymar"
 [England]="Rooney"
)

Array-Elemente anzeigen

Sie müssen das echo verwenden oder printf Befehl in Bash, um den Inhalt des Arrays zu drucken. Ähnlich wie wir die spezielle Variable * verwendet haben und @ Um das indizierte Array zu drucken, sollte dasselbe auch zum Drucken assoziativer Arrays verwendet werden.

$ echo ${STAR_PLAYERS[@]}
$ echo ${STAR_PLAYERS[*]}

Es gibt einen signifikanten Unterschied zwischen * und @ und um den Unterschied zwischen * zu kennen und @ und wie es mit Arrays funktioniert, finden Sie im Abschnitt "Schleife über Array-Elemente" in unserer Bash For-Schleife Anleitung.

Wenn Sie versuchen, die Array-Elemente ohne Verwendung von * zu drucken oder @ , die Ausgabe ist leer.

$ echo ${STAR_PLAYERS}

Auch wenn Sie sich die obige Ausgabe ansehen, werden nur die Werte gedruckt und nicht die Schlüssel. Die Werte, die Sie drucken, werden nicht geordnet. Sie können den Wert eines bestimmten Elements mit seinem Schlüssel erfassen.

$ echo ${STAR_PLAYERS[Brazil]}

Neue Elemente zum Array hinzufügen

Das Hinzufügen eines neuen Elements zum Array ist einfach. Alles, was Sie tun müssen, ist ein neues Schlüssel-Wert-Paar wie unten gezeigt zu erstellen.

$ STAR_PLAYERS[Belgium]="Hazard"
$ echo ${STAR_PLAYERS[@]}

Wenn Sie versuchen, denselben Schlüssel zu verwenden, der bereits im Array vorhanden ist, wird der Wert mit dem neuen überschrieben.

$ STAR_PLAYERS[England]="Sterling"
$ echo ${STAR_PLAYERS[@]}

Neue Elemente an das Array anhängen

Sie können Elemente auch mit der folgenden Syntax an ein Array anhängen.

$ STAR_PLAYERS+=([Spain]="Ramos")
$ echo ${STAR_PLAYERS[@]}

Schlüssel-Wert-Paar drucken

Aus den vorherigen Beispielen haben Sie vielleicht verstanden, dass nur die Werte gedruckt werden. Sie können die Liste der Schlüssel allein erhalten, indem Sie "!" voranstellen Symbol mit dem Array.

$ echo ${!STAR_PLAYERS[@]}

Wenn Sie Schlüssel und Wert gleichzeitig drucken möchten, können Sie die for loop verwenden .

for elem in "${!STAR_PLAYERS[@]}"
do
 echo "key : ${elem}" -- "value: ${STAR_PLAYERS[${elem}]}"
done

Länge des assoziativen Arrays

Sie können die Länge des assoziativen Arrays erhalten, d. h. die Gesamtzahl der im Array vorhandenen Elemente, indem Sie "#" voranstellen Symbol mit dem Array. Dies ist auch bei indizierten Arrays üblich.

$ echo ${#STAR_PLAYERS[@]}

Überprüfen Sie, ob das Element im Array vorhanden ist

Manchmal möchten Sie vielleicht überprüfen, ob das Element bereits im Array vorhanden ist, bevor Sie eine Verarbeitung mit einem bestimmten Element durchführen. Es gibt viele Möglichkeiten, dies zu tun, aber unten ist der einfachste Weg.

Ich verwende die bedingte Anweisung mit dem -n -Flag, das prüft, ob die Länge der Zeichenfolge, die von ${STAR_PLAYERS[Argentina]} zurückgegeben wird, überprüft wird ist ungleich Null. Es erweitert den angegebenen Schlüssel und der Wert wird tatsächlich gegen -n geprüft Flagge.

if [[ -n "${STAR_PLAYERS[Argentina]}" ]] 
then
  echo "Element is present"
else
  echo "Element not present"
fi

Nur lesendes assoziatives Array

Sie können ein assoziatives Array schreibgeschützt machen. In einem schreibgeschützten Zustand können Sie nach der Initialisierung des Arrays keine neuen Elemente zum Array hinzufügen oder Werte innerhalb des Arrays ändern. Zusammen mit dem declare Befehl müssen Sie den -r verwenden Flagge.

$ declare -r -A STAR_PLAYERS=(
 [Argentina]="Messi"
 [Brazil]="Neymar"
 [England]="Rooney"
)
$ STAR_PLAYERS[Spain]="Ramos"
$ STAR_PLAYERS[England]="Sterling"
$ echo ${STAR_PLAYERS[@]}

Elemente entfernen

Wenn Sie ein bestimmtes Element aus dem Array entfernen möchten, können Sie unset verwenden Befehl mit dem Elementschlüsselnamen. Wenn ich zum Beispiel das Element (Spain="Ramos" ), dann sollte die Syntax wie folgt lauten.

$ unset STAR_PLAYERS[Spain]

Ein Array leeren

Sie können auch alle Elemente aus dem Array entfernen und es leer machen, indem Sie das Array wie unten gezeigt neu initialisieren.

$ echo ${STAR_PLAYERS[@]}
$ declare -A STAR_PLAYERS=()

Array entfernen

Wenn Sie das Array entfernen möchten, können Sie den Array-Namen ohne Schlüssel verwenden.

$ unset STAR_PLAYERS

Schlussfolgerung

In diesem Artikel haben wir gesehen, was assoziative Arrays in Bash und einige ihrer Funktionalitäten sind. Der Nachteil von Bash ist, dass Sie entweder Logik manuell schreiben oder externe Tools verwenden müssen, um das gewünschte Ergebnis zu erzielen. Wenn ich beispielsweise ein assoziatives Array in json-Objekte konvertieren muss, muss ich jq verwenden Tool, das nicht in Bash integriert ist. Hier sollten Sie versuchen, Python zu verwenden, das einfach zu verwendende Methoden bietet, wenn Sie mit Arrays und anderen Datenstrukturen arbeiten müssen.

Verwandte Lektüre:

  • Bash-Skripting – While- und Until-Schleife mit Beispielen erklärt
  • Bash-Skripting – For-Schleife mit Beispielen erklärt
  • Bash-Scripting – Funktionen mit Beispielen erklärt
  • Bash-Scripting – Variablen mit Beispielen erklärt
  • Bash-Umleitung mit Beispielen erklärt
  • Bash-Echo-Befehl mit Beispielen in Linux erklärt
  • Bash Heredoc-Tutorial für Anfänger

Linux
  1. So schreiben Sie ein Bash-Skript mit Beispielen

  2. Bash-Arrays mit Beispielen

  3. Bash-If-Else-Anweisung mit Beispielen

  4. AWK-Arrays erklärt mit 5 praktischen Beispielen

  5. Das ultimative Bash-Array-Tutorial mit 15 Beispielen

Bash-Scripting – Printf-Befehl mit Beispielen erklärt

Bash-Scripting – Indiziertes Array mit Beispielen erklärt

Tr-Befehl in Linux mit Beispielen erklärt

Bash-Scripting Teil 2 – For- und While-Schleifen mit Beispielen

Bash Scripting Einführungstutorial mit 5 praktischen Beispielen

Bash-Skript für Schleife mit Beispielen erklärt