Som de fleste programmeringssprog skal bash-scripts nogle gange håndtere en liste over relaterede værdier. Den enkleste form er standardarrayet.

I bash er array-programmering ret anderledes, især når det kommer til syntaks. Bash-arrays er også strengt endimensionelle, men de har stadig masser af anvendelsesmuligheder.

Den grundlæggende syntaks for Bash-arrays

Det er ligetil at oprette et array i bash. Du kan initialisere et helt array ved hjælp af parenteser, for eksempel:

by=(London Paris Milano "New York")

(Du kan finde al koden fra dette byeksempel i denne GitHub Gist.)

Dette skaber et array, der indeholder fire elementer, indekseret fra 0 til 3. Bemærk, at den fjerde værdi er en citeret streng bestående af to ord. Du skal citere værdier, der indeholder mellemrum for at tydeliggøre, at de ikke er separate værdier.

Du kan få adgang til et enkelt element ved hjælp af parentessyntaksen, der er almindelig på tværs af programmeringssprog:

by[2]

Da dette er bash, har du brug for et par justeringer for rent faktisk at bruge værdien i et udtryk:

  • Du skal sætte dollartegnet foran ($) til variabelnavnet.
  • Du skal også bruge seler ({}) for at gøre variabelnavnet utvetydigt. Som standard vil bash behandle $city[2] som en variabel navngivet by. Tilføj klammeparenteser for at fortælle bash også at evaluere parenteserne og indeksnummeret.

Standardbash-array-adgangssyntaksen er så:

${variabelnavn[indeks]}

Her er et komplet eksempel:

#!/bin/bash

by=(London Paris Milano "New York")
ekko ${by[3]}

# New York

I stedet for at initialisere et array på én gang, kan du tildele det trin for trin. Dette script svarer længere til det forrige eksempel:

#!/bin/bash

by[0]=London
by[1]=Paris
by[2]=Milano
by[3]="New York"
ekko ${by[3]}

# New York

Bemærk, at du i begge tilfælde skal være forsigtig med ikke at tilføje mellemrum omkring lighedstegnet. "by[0] = London", med mellemrum omkring lighedstegnet, vil generere en fejl.

Flere anvendelser til Bash Arrays

Arrays er perfekte til lagring af relaterede data. Her er et (meget begrænset) shell-script til at få kvadratroden af ​​et tal:

#!/bin/bash

sqrt[1]=1
sqrt[4]=2
sqrt[9]=3
sqrt[16]=4
sqrt[25]=5

echo ${sqrt[$1]}

Bemærk, at scriptet bruger værdien $1 som array-indekset. $1 repræsenterer det første kommandolinjeargument, som scriptet modtager, så du kan køre dette script sådan:

$ ./sqrt.sh 9
3

Du er måske opmærksom på $(cmd) syntaks til at udføre en kommando og gemme dens output i en variabel. Du kan kombinere dette med array-initialiseringssyntaksen for at få en række filer at arbejde med:

arr=( $(ls) )

En matrix er ofte en perfekt datastruktur til iteration og Bash er ingen undtagelse. Du kan gå gennem et array for at udskrive hvert element eller for at udføre en operation på hvert medlem.

Du kan adressere et array i -en til.. i sløjfe, for at gentage dens indhold. For eksempel er her en simpel løkke, der udskriver antallet af linjer i hver fil i arrayet arr:

for fil i "${arr[@]}"; gør
wc -l "$fil"
Færdig

# 3 envvars
# 547 httpd.conf
# ...

Bemærk, at dette mønster gør brug af @ symbol for at hente alle elementer fra arrayet.

Mere Bash Array Syntax

Du kan få antallet af elementer i et array ved at bruge følgende:

ekko ${#city[@]}

# 4

Du kan tilføje et nyt element til enden af ​​et standardarray som sådan:

arr+=(4)

Så for at tilføje en femte by til listen:

by+=(Rom)
ekko ${city[@]}

# London Paris Milano New York Rom

For at udtrække en del af et array kan du bruge en syntaks, der tilnærmer udsnitsoperationen for mange andre sprog:

${arr[@]:s: n}

Denne syntaks returnerer et udsnit af arrayet, der begynder ved position s og indeholdende n genstande. Du kan udelade :n del at udtrække alle elementer fra s indtil slutningen af ​​listen.

ekko ${city[@]:2:2}
# Milano New York

ekko ${city[@]:3}
# New York Rom

Bash har mange funktioner, de skal bare lære noget

Arrays i bash kan have begrænsninger, men de tilbyder den samme grundlæggende funktionalitet, som de fleste programmeringssprog gør. Selvom bash historisk set har understøttet ligefremme endimensionelle arrays, ændrer tiderne sig. Den seneste version af bash, 4, understøtter associative arrays og negative array-indeksering.

Uanset hvilken version af bash du bruger, er det vigtigt at forstå dens nuancer. Selv normal variabel syntaks har masser af idiosynkrasier.

Bash-variabler forklaret: En simpel vejledning med eksempler

Læs Næste

DelTweetDelE-mail

Relaterede emner

  • Programmering
  • Linux
  • Programmering
  • Linux Bash Shell
  • Scripting

Om forfatteren

Bobby Jack (71 artikler udgivet)

Bobby er en teknologientusiast, der har arbejdet som softwareudvikler i det meste af to årtier. Hos MUO er han juniorredaktør for programmeringssektionen. Han brænder for spil, arbejder som chefredaktør på Switch Player Magazine og er fordybet i alle aspekter af online publicering og webudvikling.

Mere fra Bobby Jack

Abonner på vores nyhedsbrev

Tilmeld dig vores nyhedsbrev for tekniske tips, anmeldelser, gratis e-bøger og eksklusive tilbud!

Klik her for at abonnere