Ta tak i Bash-arrayer – hvordan deklarerer dem, manipulerer dem og sletter dem.

Matriser er datalagre som brukes til å holde verdier som har en relasjon til hverandre. I motsetning til i de fleste programmeringsspråk, kan Bash-matriser lagre verdier av forskjellige datatyper i samme matrise.

Bash har to typer arrays: indekserte arrays og assosiative arrays. For indekserte matriser begynner indeksene fra 0 til (n-1), som er vanlig på de fleste språk. Matriser i Bash er imidlertid sparsomme. Dette betyr at du kan tilordne det (n-1) array-elementet uten å ha tildelt det (n-2) elementet.

I denne opplæringen lærer du hvordan du arbeider med arrays i Bash. La oss komme i gang.

Definere matriser

Det er tre måter du kan definere arrays i Bash. I likhet med Bash-variabler, må arrays initialiseres ved opprettelse. Det eneste unntaket fra dette er hvis du bruker erklære nøkkelord. Du må også være sikker på at det ikke er igjen plass på hver side av tildelingsoperatøren når du initialiserer matrisen.

Den første metoden er sammensatt tilordning av verdier til matrisenavnet. Det er to måter å gjøre dette på:

arr1 = (3 5 6 7)
# or this
arr2 = ([3]=5 [1]=8 [0]=7)

I den første sammensatte oppgaven blir verdiene i de runde parentesene tilordnet sekvensielt fra indeksen [0] til [3].

Men i den andre blir verdiene tilordnet en indeks i hvilken rekkefølge programmereren har angitt.

I slekt: Hva er miljøvariabler i Linux? Alt du trenger å vite

Hvis du tok nøye hensyn til arr2, vil du legge merke til den indeksen [2] ble utelatt. Matrisen vil fortsatt bli opprettet uten at det blir kastet feil. Denne oppgaven er faktisk en demonstrasjon av sparsom lagring i Bash-arrayer som vi var inne på tidligere.

Legg merke til at det ikke er noen kommaer som skiller matriseverdiene. Verdiene er ganske enkelt atskilt med mellomrom.

Den andre metoden erklærer arrayen indirekte. Du kan bare begynne å tilordne verdier til null array-elementer:

arr3[0]=Toyota
arr3[1]=Honda
arr3[2]=Mercedes

Den tredje måten er å eksplisitt deklarere matrisen med nøkkelordet erklære:

declare -a arrayName

Operasjoner på matriser

For å få tilgang til matriseelementer, bruk denne syntaksen: ${array[indeks]}

fruits=(mango banana apples)
echo${fruits[1]}# output is banana

Hvis du trenger å skrive ut hele matrisen i stedet, bruk @ symbol som

indeks av ${array[indeks]}:

echo${fruits[@]}

For å finne ut antall elementer i matrisen, bruk # symbol som vist nedenfor:

echo ${#fruits[1]}

Det kan også hende du må endre array-elementer – se eksempelet nedenfor om hvordan du gjør det. Det ligner på hvordan du legger til et nytt element. Den eneste forskjellen er at du erstatter en verdi til en indeks som allerede har en verdi.

fruits[1]=pears

Assosiative matriser

En matrise som har vilkårlige verdier som nøkler kalles en assosiativ matrise. Disse matrisene brukes til å lagre relaterte nøkkelverdi-par.

I slekt: Slik gjør du Bash-skript til klikkbare apper ved hjelp av AppleScript

For å definere en assosiativ matrise, må du gjøre det eksplisitt ved å bruke nøkkelordet erklære.

# associative array called animal
declare -A animal
animal[giraffe]=tall
animal[lion]=brave
animal[cheetah]=fast

Du kan få tilgang til et medlemselement på samme måte som du gjør indekserte matriser:

echo${animal[lion]}

Hvis du ønsker å skrive ut alle verdiene, kan du bruke @ symbol som vist nedenfor:

echo${animal[@]}

Hvis du vil skrive ut alle array-tastene, kan du bruke @ og ! symboler som vist nedenfor:

echo${!animal[@]}

For å finne antall elementer den assosiative matrisen har, bruk samme syntaks som du ville brukt med indekserte matriser (demonstrert i den siste delen).

Hvis du ønsker å slette et matriseelement eller hele matrisen, bruk syntaksen nedenfor:

unset arrayName[Key] # delete array item
unset arrayName # delete entire array

Ved å bruke printf-kommandoen

Du har kanskje lagt merke til at hele denne artikkelen bruker ekko kommando for å sende ut data til skallet. De ekko kommandoen fungerer for denne opplæringen, men har få funksjoner og fleksibilitet når det gjelder strengformatering.

Imidlertid printf kommandoen tilbyr mer spesifikke formateringsalternativer som gjør Bash-skripting til en lek. Å lære printf funksjonen vil helt sikkert forbedre din strengformateringsopplevelse og effektivitet i Bash.