Forstå assosiative matriser i Linux Bash med eksempler

Forstå assosiative matriser i Linux Bash med eksempler
Assosiative matriser er en abstrakt datatype som kan betraktes som ordbøker eller kart. Hvordan de skiller seg fra andre matriser er at de holder nøkkelverdiparene der tastene kan være vilkårlige og brukerdefinerte strenger i stedet for de vanlige indeksnumrene. Tilknyttede matriser har to hovedegenskaper:
  • Hver tast i matrisen kan bare vises en gang. Du kan tenke på det som en unik ID for en bruker i en liste.
  • En verdi kan vises mer enn en gang i en matrise. For eksempel kan to personer i en liste ha samme navn, men trenger å ha forskjellige bruker -ID -er.

I denne artikkelen vil vi forklare hvordan du kan erklære og initialisere assosiative matriser i Linux Bash. Vi vil ytterligere utdype kraften til de assosiative matriser ved hjelp av forskjellige eksempler.

Vi har kjørt eksemplene som er nevnt i denne artikkelen på et Debian 10 Buster -system. Imidlertid kan du enkelt gjenskape på nesten alle Linux -distros.

Verifisere forutsetningene

For å bruke assosiative matriser på Linux Bash, må GNU Bash -versjonen være lik eller høyere enn versjon 4. Åpne Linux -terminalen din ved å få tilgang til den via applikasjonslanseringssøket. Skriv deretter inn følgende kommando for å sjekke den installerte versjonen av Bash:

$ Bash -Versjon

Min nåværende bash -versjon er 5.0.3 Så jeg er god til å gå. I tilfelle bash -versjonen din er mindre enn 4, kan du oppgradere bash ved å kjøre følgende kommando som sudo:

$ sudo apt-get install-bare oppgradering bash

Erklærer en assosiativ matrise og initialisere det

Å erklære et assosiativt utvalg er ganske enkelt i bash og kan gjøres gjennom deklar -kommandoen:

$ erklærer -a “ArrayName”

I vårt eksempel vil vi erklære en matrisevariabel med navnet Samplearray1 som følger:

$ erklære -A samplearray1

Neste trinn er å initialisere de nødvendige verdiene for matrisen. I vårt eksempel ønsker vi å ha en rekke der verdier er noen få landsnavn og nøklene er deres relevante landsnavnforkortelser. Her vil vi mate matriseverdiene, en etter en som følger:

$ ArrayName [nøkkel] = verdi

Eksempel:

$ SAMPLEARRAY1 [CHN] = Kina
$ samplearray1 [jpn] = Japan
$ SAMPLEARRAY1 [KOR] = Korea
$ SAMPLEARRAY1 [TWN] = Taiwan
$ SAMPLEARRAY1 [TH] = Thailand

Et raskt alternativ er å erklære og initialisere en matrise i en enkelt base -kommando som følger:

$ DECLARE -A ArrayName = ([Key1] = Value1 [Key2] = Value2 [Key3] = Value3 .. . )

Slik kan vi erklære og initialisere vårt nevnte utvalg, alternativt, som følger:

$ erklære -A SAMPLEARRAY1 = ([CHN] = Kina [JPN] = Japan [Kor] = Korea [TWN] = Taiwan
[Th] = Thailand)

Nå vil vi presentere noen eksempler som vil utdype hva alt du kan gjøre med assosiative matriser i bash:

Eksempel1: Å få tilgang til matriser og verdier

I dette eksemplet vil vi forklare hvordan du kan:

  • Skriv ut en verdi mot en nøkkel
  • Skriv ut alle array -tastene samtidig
  • Skriv ut alle arrayverdier samtidig

Og,

  • Skriv ut alle nøkkelverdiparene på en gang

Skrive ut

Du kan Skriv ut en verdi mot en nøkkel Ved å bruke følgende kommandosyntax:

$ ECHO $ ​​ArrayName [nøkkelnavn]

Slik kan vi få tilgang til et lands fulle navn ved å oppgi landets navnforkortelse, fra vår Samplearray1:

$ ekko $ SampleArray1 [chn]
$ Echo $ SampleArray1 [TWN]

Hvis du er interessert i Skrive ut alle tastene Av din assosiative matrise kan du gjøre det ved å bruke følgende syntaks:

$ for tast i "$ !ArrayName [@] "; gjør ekko $ nøkkel; ferdig

Følgende kommando vil skrive ut alle forkortelser fra landsnavn fra min samplearray1 av

Bruker en for loop:

$ for tast i "$ !samplearray1 [@] "; gjør ekko $ nøkkel; ferdig

Et annet alternativ til å skrive ut alle nøkler fra matrisen er ved å bruke parameterutvidelse. Følgende kommando vil skrive ut alle tastene på samme linje:

$ ekko "$ !samplearray1 [@] "

Hvis du er interessert i Skrive ut alle matriseverdiene på en gang, Du kan gjøre det ved å bruke for -loopen som følger:

$ for val i "$ arrayName [@]"; gjør ekko $ val; Ferdig

Følgende kommando vil skrive ut alle fulle landsnavn som er lagret i min samplearray1:

$ for val i "$ samplearray1 [@]"; gjør ekko $ val; Ferdig

Et annet alternativ til å skrive ut alle verdier fra matrisen er ved å bruke parameterutvidelse. Følgende kommando vil skrive ut alle verdier på samme linje:

$ ekko "$ SampleArray1 [@]"

Det neste nyttige eksemplet vil Skriv ut alle nøkkelverdiparene På en gang ved å bruke for -loopen som følger:

$ for tast i "$ !samplearray1 [@] "; gjør ekko" $ nøkkel er en forkortelse for
$ samplearray1 [$ key] "; ferdig

Du kan selvfølgelig gjøre denne informasjonen henting mer nyttig i dine komplekse og meningsfulle bashskript.

Eksempel 2: Telling av array -elementer

Følgende kommando kan brukes til å telle og skrive ut antall elementer i din assosiative matrise:

$ ekko "$ #arrayName [@]"

Utgangen fra følgende kommando viser at jeg har fem elementer i min Samplearray1:

$ ekko "$ #samplearray1 [@]"

Eksempel 3: Legge til nye data i Array

Hvis du vil legge til et element i en matrise etter at du allerede har erklært og initialisert det, er dette syntaksen du kan følge:

$ ArrayName+= ([nøkkel] = verdi)

I mitt eksempel vil jeg legge til et annet land sammen med forkortelsen til fylkets navn, så jeg vil bruke følgende kommando:

$ samplearray1+= ([al] = alabama)

Å gjenspeile matriseverdiene antyder nå at det nye landet blir lagt til i matrisen min:

$ ekko "$ SampleArray1 [@]"

Eksempel 4: Slette element fra Array

Ved å fjerne en oppføring fra Associative Array, kan du slette den som et matriseelement. Dette er uset syntaksbruk kan bruke for å gjøre det:

$ unset arrayName [nøkkel]

I mitt eksempel vil jeg fjerne nøkkelverdi-paret "Al-Alabama" fra mitt utvalg, så jeg vil ikke ta opp "AL" -tasten i kommandoen min:

$ unset samplearray1 [al]

Å gjenspeile matriseverdiene antyder nå at al-Alabama-nøkkelverdien nå er fjernet fra min matrise:

$ ekko "$ SampleArray1 [@]"

Eksempel 5: Bekreftelse om det finnes en vare i matrisen

Ved å bruke IF -tilstanden på følgende måte, kan du bekrefte om et element er tilgjengelig i din assosiative matrise eller nå:

$ if [$ arrayName [searchKey]+_]; da eksisterer ekko "; ellers ekko "ikke tilgjengelig"; fi

Hvis jeg for eksempel sjekker om det nylig slettede al-Alabama-varen finnes i min matrise, vil følgende melding skrives ut:

$ if [$ samplearray1 [al]+_]; da eksisterer ekko "; ellers ekko "ikke tilgjengelig"; fi

Hvis jeg ser etter et element som eksisterer, vil følgende resultat bli skrevet ut:

$ if [$ samplearray1 [jpn]+_]; da eksisterer ekko "; ellers ekko "ikke tilgjengelig"; fi

Eksempel 6: Slette en matrise

Du kan slette et assosiativt utvalg fra Bash -minnet ved å bruke UNSET -kommandoen som følger:

$ unset arrayname

Ved å bruke følgende enkle kommando, vil jeg slette min samplearray1 fra minnet:

$ unset samplearray1

Nå, når jeg prøver å skrive ut alle matriseverdiene gjennom følgende kommando, får jeg ingen.

$ ekko "$ SampleArray1 [@]"

Ved å bruke disse eksemplene i Linux Bash -skriptene dine, kan du bruke kraften til de assosiative matriser for å oppnå en løsning på mange komplekse problemer.