En guide til Bash-arrayer

I denne veiledningen om Bash-matriser lærer du hvordan du deklarerer og arbeider med indekserte og assosiative matriser i Bash.

I Bash kan du lage matriser for å lagre en samling av elementer. Bash-arrayer er endimensjonale samlinger. I programmeringsspråk som C og C++ er arrays samlinger av elementer av samme datatype. Men i Bash, avhengig av brukstilfellet, kan du lagre heltall og strenger i samme matrise.

I denne opplæringen lærer du hvordan du deklarerer en Bash-array og får tilgang til elementene. Du vil da lære hvordan du går gjennom elementene i en matrise og legger til elementer i en matrise. Til slutt vil du lære om assosiative arrays i Bash.

La oss begynne!

⚙ Interessert i å kode sammen? Her er forutsetningene:

Hvordan erklære en Bash Array

I denne delen lærer du syntaksen for å deklarere en Bash-matrise og kodeeksempler.

Syntaks for Bash Array Declaration

Du kan erklære en matrise i Bash ved å bruke følgende syntaks:

$ arrayName=(elt1 elt2 ... eltN)

# arrayName is the name of the array
# elt1 through eltN are the N elements in the array

I syntaksen ovenfor angir arrayName navnet på arrayen som inneholder N elementer elt1…eltN.

Elementene i en matrise er innelukket mellom åpnings- og lukkeparentesen (). Legg også merke til at elementene i matrisen er atskilt med et mellomrom. Som med alle Bash-variabler, skal det ikke være mellomrom før eller etter tildelingsoperatoren =.

📑 I de fleste andre programmeringsspråk vil du separere elementene i en matrise eller lignende samlinger med kommaer. Men i Bash er mellomrom skillelinjen.

I Bash blir slike arrayer der elementene identifiseres ved deres indeks referert til som indeksert array.

Erklærer indekserte arrays i Bash

La oss lage priser, en rekke tall.

$ prices=(24 27 18 30 15)

Som nevnt i syntaksen, er tallene i prismatrisen atskilt med et mellomrom, omsluttet i parentes, uten mellomrom før og etter tildelingsoperatoren =.

I Bash kan du bruke ekko-kommandoen til å skrive ut verdien til en variabel. Ved å bruke $variableName skrives verdien av variabelName ut. Du kan imidlertid se at bruk av navnet på matrisen skriver ut bare det første elementet.

$ echo $prices
24

Bash-matriser følger nullindeksering. Så det første elementet er på indeks 0, det andre elementet er på indeks 1, og så videre. Du kan også bruke negativ indeksering; indeksen til det siste array-elementet er -1.

  Slik aktiverer du Chase-kredittkortet ditt online

Hva skjer hvis du prøver å få tilgang til elementet på en bestemt indeks og skrive det ut? La oss prøve å skrive ut elementet ved indeks 1.

$ echo $prices[1]
24[1]

Hvorfor er utgangen 24[1]? 🤔 Dette er fordi Bash erstatter $priser med 24, det første elementet i matrisen og [1] skrives ut som sådan.

For å skrive ut elementet ved en bestemt indeks, kan du bruke parameterutvidelsen av skjemaet ${priser[index]}.

$ echo ${prices[1]}
# 27
$ echo ${prices[2]}
# 18

For å skrive ut alle elementene i matrisen, kan du spesifisere @ i stedet for en spesifikk indeks.

$ echo ${prices[@]}
24 27 18 30 15

La oss deretter lage en rekke strenger. Å kjøre følgende kommando oppretter en indeksert matrise:

$ declare -a fruits

Alternativet -a oppretter en indeksert matrise. Du kan nå fylle ut matrisen, ett element om gangen, ved å erklære elementet i en bestemt indeks, som vist nedenfor:

$ fruits[0]="cherry"
$ fruits[1]="berry"
$ fruits[2]="apple"
$ fruits[3]="pear"
$ fruits[4]="melon"
$ fruits[5]="orange"

Nå, for å skrive ut alle elementene i arrayet, kan du bruke ${fruits[@]}.

$ echo ${fruits[@]}
cherry berry apple pear melon orange

Få tilgang til Elements of a Bash Array

Du kan få tilgang til elementene i matrisen på følgende måter:

  • Gå gjennom arrayet og få direkte tilgang til elementet
  • Gå gjennom settet med indekser og få tilgang til elementer ved en bestemt indeks

Sløyfe gjennom matrisen og tilgangselementene

Hvis du har kodet i Python, har du brukt for-løkken ved å bruke følgende syntaks:

for elt in some_list:
    print(elt)

La oss nå skrive Bash-ekvivalenten til ovennevnte for loop.

Vi vet at {priser[@]} utvides til alle elementene i prismatrisen. Og ${priser[@]} gir oss verdiene til alle elementene.

Bash for loop ligner på Pythons for loop-syntaks, men setningene i loop-kroppen skal være omsluttet av do and done, som vist:

$ for price in ${prices[@]}
> do
> echo $price
> done

Fordi vi bruker ekko-kommandoen og skriver ut verdien av den variable prisen, får vi følgende utgang:

# output
24
27
18
30
15

Få tilgang til elementene ved å bruke Array Index

En annen måte å gå gjennom matriser på er å bruke indeksen til elementene. Dette ligner på for loop-konstruksjonen i Python bruker range()-funksjonen:

for i in range(len(some_list)):
    print(i)

For å få en liste over indekser å gå gjennom, kan du plassere et utropstegn (!) foran matrisenavnet i parameterutvidelsen. Dette vil gi deg listen over alle gyldige indekser for matrisen, som vist:

$ echo ${!prices[@]}
0 1 2 3 4

Pristabellen inneholder 5 elementer, så indeksen starter på 0 og går opp til 4.

  Hvordan åpne utklippstavlen min?

Deretter kan vi gå gjennom listen over indekser og få tilgang til elementet ved hver indeks. For indeks i, ${priser[i]} er elementet ved indeksen i.

$ for i in ${!prices[@]}
> do
> echo ${prices[i]}
> done

Sløyfen ovenfor skriver ut alle elementene i arrayet.

# output
24
27
18
30
15

💬 Her, etter å ha tilgang til hvert element, utfører vi en enkel operasjon med å skrive ut verdien. Generelt kan vi ha hvilken som helst gyldig behandling på elementene.

Legg til elementer til en Bash-array

I prisarrayen har vi fem elementer (ved indeksene 0,1,2,3 og 4). Hvis du vil legge til et element på slutten av matrisen ved indeks 5, kan du gjøre det som følger:

$ prices[5]=21

Vi ser at 21 er lagt til på slutten av prislisten.

$ echo ${prices[@]}
24 27 18 30 15 21

Det er imidlertid mer praktisk å legge til på slutten av matrisen – uten å huske – indeksen til det sist tilføyde elementet eller antallet elementer som for øyeblikket er i matrisen.

Du kan bruke arrayName+=(elements(s)) for å legge til ett eller flere elementer til en matrise, som vist:

$ prices+=(10)

Nå, hvis vi skriver ut prismatrisen, ser vi at 10 er lagt til på slutten av matrisen.

$ echo ${prices[@]}
24 27 18 30 15 21 10

La oss deretter lære hvordan du deklarerer assosiative matriser i Bash.

Assosiative arrays i Bash

Hvis du vil definere en relasjon i form av nøkkelverdi-par, kan du bruke en assosiativ matrise. Du kan deklarere en assosiativ matrise ved å bruke følgende generelle syntaks. Legg merke til at vi bruker alternativet -A i stedet for -a.

$ declare -A fruits_prices

Du kan legge til elementer i den assosiative matrisen ved å spesifisere nøkkelen og den tilsvarende verdien. Her har vi lagt til navnene på fruktene som nøkler og tallene fra prislisten som verdier.

$ fruits_prices[cherry]=24
$ fruits_prices[berry]=27
$ fruits_prices[apple]=18
$ fruits_prices[pear]=30
$ fruits_prices[melon]=15
$ fruits_prices[orange]=21

Så hvordan får vi tilgang til elementene i en assosiativ matrise?

  Slik aktiverer du Crunchyroll på en hvilken som helst enhet

Akkurat slik du vil slå opp verdien ved å bruke den tilsvarende nøkkelen i en Python-ordbok, kan du få tilgang til verdiene i en assosiativ matrise ved å bruke tastene.

$ echo ${fruits_prices[berry]}
# 27

Vi ser at ${fruits_prices[@]} utvides til verdiene og ${!fruits_prices[@]} utvides til tastene.

$ echo ${fruits_prices[@]}
# Output: 18 27 21 24 30 15
$ echo ${!fruits_prices[@]}
# Output: apple berry orange cherry pear melon

Merk: Rekkefølgen på elementene er ikke den samme som rekkefølgen vi la dem til. Dette er fordi, i motsetning til indekserte arrays, er assosiative arrays ikke ordnede samlinger. Snarere jobber de med assosiasjonen mellom nøklene og verdiene. Derfor er nøklene til assosiative matriser det indekser er for å indeksere matriser.

Du kan også gå gjennom den assosiative matrisen og få tilgang til tastene, som vist:

$ for key in ${!fruits_prices[@]}
> do
> echo $key
> done
# Output
apple
berry
orange
cherry
pear
melon

Følgende loop viser hvordan du får tilgang til verdiene.

$ for value in ${fruits_prices[@]}
> do
> echo $value
> done
# Output
18
27
21
24
30
15

Selv om det anbefales å bruke arrayName[key]=verdi, du kan også deklarere det som en sekvens slik:

declare -A arrayName
arrayName=(key1 value1 key2 value2 ... keyN valueN)

På denne måten utleder Bash det første elementet som den første nøkkelen, det andre elementet som den første verdien, og så videre.

Oppsummering

Jeg håper du nå forstår hvordan du lager og jobber med Bash-arrayer. Her er en rask gjennomgang av hva du har lært.

  • Du kan erklære en indeksert matrise i Bash ved å bruke syntaksen arrayName=(elt1 elt2 elt3 … eltN) eller kjøre declare -a arrayName og legge til elementer i matrisen.
  • For å få tilgang til elementene kan du gå gjennom ved å bruke ${arrayName[@]}. Alternativt kan du få listen over alle gyldige indekser ved å bruke parameterutvidelsen ${!arrayName[@]}.
  • Til slutt lærte du også hvordan du deklarerer en assosiativ matrise for å lagre nøkkelverdi-par i Bash.

Sjekk deretter veiledningen for loops i Bash.