En guide til Bash Arrays

I denne guide om Bash-arrays lærer du, hvordan du deklarerer og arbejder med indekserede og associative arrays i Bash.

I Bash kan du oprette arrays til at gemme en samling af elementer. Bash-arrays er endimensionelle samlinger. I programmeringssprog som C og C++ er arrays samlinger af elementer af samme datatype. I Bash kan du dog, afhængigt af brugssituationen, gemme heltal og strenge i det samme array.

I denne vejledning lærer du, hvordan du deklarerer et Bash-array og får adgang til dets elementer. Du vil derefter lære, hvordan du går gennem elementerne i et array og tilføjer elementer til et array. Til sidst lærer du om associative arrays i Bash.

Lad os begynde!

⚙ Interesseret i at kode med? Her er forudsætningerne:

Sådan erklærer du en Bash Array

I dette afsnit lærer du syntaksen til at erklære et Bash-array og kodeeksempler.

Syntaks for Bash Array Declaration

Du kan erklære et array i Bash ved hjælp af 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 ovenstående syntaks angiver arrayName navnet på det array, der indeholder N elementer elt1…eltN.

Elementerne i et array er indesluttet mellem åbnings- og lukkeparentesen (). Bemærk også, at elementerne i arrayet er adskilt af et mellemrum. Som med enhver Bash-variabel bør der ikke være mellemrum før eller efter tildelingsoperatoren =.

📑 I de fleste andre programmeringssprog adskiller du elementerne i et array eller lignende samlinger med kommaer. Men i Bash er mellemrum adskilleren.

I Bash omtales sådanne arrays, hvor elementerne er identificeret ved deres indeks, som indekseret array.

Erklærer indekserede arrays i Bash

Lad os skabe priser, en række tal.

$ prices=(24 27 18 30 15)

Som nævnt i syntaksen er tallene i prismatrixen adskilt af et mellemrum, omgivet af parentes, uden mellemrum før og efter tildelingsoperatoren =.

  10 værktøjer til at forvandle dine Google Sheets til en API

I Bash kan du bruge echo-kommandoen til at udskrive værdien af ​​en variabel. Ved at bruge $variableName udskrives værdien af ​​variableName. Du kan dog se, at brug af navnet på arrayet kun udskriver det første element.

$ echo $prices
24

Bash-arrays følger nul indeksering. Så det første element er ved indeks 0, det andet element er ved indeks 1, og så videre. Du kan også bruge negativ indeksering; indekset for det sidste array-element er -1.

Hvad sker der, hvis du forsøger at få adgang til elementet på et bestemt indeks og udskrive det? Lad os prøve at udskrive elementet ved indeks 1.

$ echo $prices[1]
24[1]

Hvorfor er udgangen 24[1]? 🤔 Dette skyldes, at Bash erstatter $priser med 24, det første element i arrayet og [1] udskrives som sådan.

For at udskrive elementet ved et bestemt indeks, kan du bruge parameterudvidelsen i formen ${priser[index]}.

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

For at udskrive alle elementerne i arrayet kan du angive @ i stedet for et specifikt indeks.

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

Lad os derefter oprette en række strenge. Ved at køre følgende kommando oprettes et indekseret array:

$ declare -a fruits

Valgmuligheden -a opretter et indekseret array. Du kan nu udfylde arrayet, et element ad gangen, ved at erklære elementet ved et specifikt indeks, som vist nedenfor:

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

Nu, for at udskrive alle elementerne i arrayet, kan du bruge ${fruits[@]}.

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

Få adgang til Elements of a Bash Array

Du kan få adgang til elementerne i arrayet på følgende måder:

  • Gå gennem arrayet og få direkte adgang til elementet
  • Gå gennem sættet af indekser og få adgang til elementer ved et specifikt indeks

Sløjfe gennem Array og Access Elements

Hvis du har kodet i Python, har du brugt for-løkken ved at bruge følgende syntaks:

for elt in some_list:
    print(elt)

Lad os nu skrive Bash-ækvivalenten til ovenstående for loop.

Vi ved, at {priser[@]} udvides til alle elementerne i prismatrixen. Og ${priser[@]} giver os værdierne for alle elementerne.

Bash for loop ligner Pythons for loop-syntaks, men udsagn i loop-kroppen skal være indesluttet i do and done, som vist:

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

Fordi vi bruger echo-kommandoen og udskriver værdien af ​​den variable pris, får vi følgende output:

# output
24
27
18
30
15

Få adgang til elementerne ved hjælp af Array Index

En anden måde at gå gennem arrays på er at bruge elementernes indeks. Dette svarer til for loop-konstruktionen i Python, der bruger range()-funktionen:

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

For at få en liste over indekser, der skal gennemgås, kan du placere et udråbstegn (!) før array-navnet i parameterudvidelsen. Dette vil give dig listen over alle gyldige indekser for arrayet, som vist:

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

Pris-arrayet indeholder 5 elementer, så indekset starter ved 0 og går op til 4.

  Sådan deaktiverer du automatisk afspilning af Netflix-trailere

Dernæst kan vi gå gennem listen over indekser og få adgang til elementet ved hvert indeks. For indeks i, ${priser[i]} er elementet ved indekset i.

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

Ovenstående løkke udskriver alle elementerne i arrayet.

# output
24
27
18
30
15

💬 Her, efter at have fået adgang til hvert element, udfører vi en simpel handling med at udskrive dets værdi. Generelt kan vi have enhver gyldig behandling på elementerne.

Føj elementer til en Bash Array

I prisarrayet har vi fem elementer (ved indeks 0,1,2,3 og 4). Hvis du vil tilføje et element til slutningen af ​​arrayet ved indeks 5, kan du gøre det som følger:

$ prices[5]=21

Vi ser, at 21 er blevet tilføjet til slutningen af ​​prisarrayet.

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

Det er dog mere bekvemt at tilføje indekset for det sidst tilføjede element til slutningen af ​​arrayet – uden at huske – eller antallet af elementer i arrayet i øjeblikket.

Du kan bruge arrayName+=(elements(s)) det til at tilføje et eller flere elementer til et array, som vist:

$ prices+=(10)

Hvis vi nu udskriver prisarrayet, ser vi, at 10 er blevet tilføjet til slutningen af ​​arrayet.

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

Lad os derefter lære, hvordan man deklarerer associative arrays i Bash.

Associative Arrays i Bash

Hvis du vil definere en relation i form af nøgleværdi-par, kan du bruge en associativ matrix. Du kan erklære et associativt array ved hjælp af følgende generelle syntaks. Bemærk, at vi bruger -A-indstillingen i stedet for -a.

$ declare -A fruits_prices

Du kan tilføje elementer til det associative array ved at angive nøglen og den tilsvarende værdi. Her har vi tilføjet frugternes navne som nøgler og tallene fra prislisten som værdier.

$ 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 adgang til elementerne i et associativt array?

  22 Bedste gratis online videodownloader

Ligesom du ville slå værdien op ved hjælp af den tilsvarende nøgle i en Python-ordbog, kan du få adgang til værdierne i et associativt array ved hjælp af tasterne.

$ echo ${fruits_prices[berry]}
# 27

Vi ser, at ${fruits_prices[@]} udvides til værdierne og ${!fruits_prices[@]} udvides til tasterne.

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

Bemærk: Rækkefølgen af ​​elementer er ikke den samme som den rækkefølge, vi tilføjede dem i. Dette skyldes, i modsætning til indekserede arrays, er associative arrays ikke ordnede samlinger. De arbejder derimod med sammenhængen mellem nøglerne og værdierne. Derfor er nøgler til associative arrays, hvad indekser er til indeks arrays.

Du kan også gå gennem det associative array og få adgang til tasterne, som vist:

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

Følgende sløjfe viser, hvordan du kan få adgang til værdierne.

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

Selvom det anbefales at bruge arrayName[key]=værdi, du kan også erklære den som en sekvens som denne:

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

På denne måde udleder Bash det første element som den første nøgle, det andet element som den første værdi og så videre.

Opsummering

Jeg håber, at du nu forstår, hvordan du opretter og arbejder med Bash-arrays. Her er en hurtig gennemgang af, hvad du har lært.

  • Du kan erklære et indekseret array i Bash ved at bruge syntaksen arrayName=(elt1 elt2 elt3 … eltN) eller køre declare -a arrayName og tilføje elementer til arrayet.
  • For at få adgang til elementerne kan du gå igennem ved hjælp af ${arrayName[@]}. Alternativt kan du få listen over alle gyldige indekser ved hjælp af parameterudvidelsen ${!arrayName[@]}.
  • Endelig lærte du også, hvordan du deklarerer et associativt array for at gemme nøgleværdi-par i Bash.

Tjek derefter vejledningen til loops i Bash.