Som de fleste programmeringsspråk, trenger bash-skript noen ganger å håndtere en liste over relaterte verdier. Den enkleste formen er standard array.
I bash er array-programmering ganske annerledes, spesielt når det kommer til syntaks. Bash-arrayer er også strengt endimensjonale, men de har fortsatt mange bruksområder.
Den grunnleggende syntaksen til Bash-arrayer
Det er enkelt å lage en matrise i bash. Du kan initialisere en hel matrise ved å bruke parenteser, for eksempel:
city=(London Paris Milano "New York")
(Du kan finne all koden fra dette byeksemplet i denne GitHub Gist.)
Dette lager en matrise som inneholder fire elementer, indeksert fra 0 til 3. Merk at den fjerde verdien er en anførselstegn som består av to ord. Du må sitere verdier som inneholder mellomrom for å klargjøre at de ikke er separate verdier.
Du kan få tilgang til et enkelt element ved å bruke brakettsyntaksen som er vanlig på tvers av programmeringsspråk:
by[2]
Siden dette er bash, trenger du et par forbedringer for å faktisk bruke verdien i et uttrykk:
- Du må sette dollartegnet foran ($) til variabelnavnet.
- Du må også bruke tannregulering ({}) for å gjøre variabelnavnet entydig. Som standard vil bash behandle $city[2] som en variabel navngitt by. Legg til klammeparenteser for å fortelle bash å evaluere parentesene og indeksnummeret også.
Standard bash array tilgangssyntaks er da:
${variable_name[indeks]}
Her er et fullstendig eksempel:
#!/bin/bash
city=(London Paris Milano "New York")
ekko ${by[3]}
# New York
I stedet for å initialisere en matrise på en gang, kan du tilordne den steg for steg. Dette skriptet er en lengre ekvivalent med det forrige eksemplet:
#!/bin/bash
city[0]=London
by[1]=Paris
by[2]=Milano
city[3]="New York"
ekko ${by[3]}
# New York
Merk at du i begge tilfeller må være forsiktig så du ikke legger til noe mellomrom rundt likhetstegnet. "by[0] = London", med mellomrom rundt likhetstegnet, vil generere en feil.
Flere bruksområder for Bash Arrays
Arrays er perfekte for lagring av relaterte data. Her er et (veldig begrenset) skallskript for å få kvadratroten av et tall:
#!/bin/bash
sqrt[1]=1
sqrt[4]=2
sqrt[9]=3
sqrt[16]=4
sqrt[25]=5
ekko ${sqrt[$1]}
Merk at skriptet bruker verdien $1 som array-indeksen. $1 representerer det første kommandolinjeargumentet skriptet mottar, så du kan kjøre dette skriptet slik:
$ ./sqrt.sh 9
3
Du er kanskje klar over $(cmd) syntaks for å utføre en kommando og lagre utdataene i en variabel. Du kan kombinere dette med array-initialiseringssyntaksen for å få en rekke filer å jobbe med:
arr=( $(ls) )
En matrise er ofte en perfekt datastruktur for iterering og Bash er intet unntak. Du kan gå gjennom en matrise for å skrive ut hvert element eller for å utføre en operasjon på hvert medlem.
Du kan adressere en matrise i en til.. i Løkke, for å iterere over innholdet. For eksempel, her er en enkel løkke som skriver ut antall linjer i hver fil i matrisen arr:
for fil i "${arr[@]}"; gjøre
wc -l "$file"
ferdig
# 3 envvars
# 547 httpd.conf
# ...
Merk at dette mønsteret gjør bruk av @ symbol for å hente alle elementer fra matrisen.
Mer Bash Array-syntaks
Du kan få antall elementer i en matrise ved å bruke følgende:
ekko ${#city[@]}
# 4
Du kan legge til et nytt element på slutten av en standard matrise slik:
arr+=(4)
Så for å legge til en femte by på listen:
by+=(Roma)
ekko ${city[@]}
# London Paris Milan New York Roma
For å trekke ut en del av en matrise kan du bruke en syntaks som tilnærmer snittoperasjonen til mange andre språk:
${arr[@]:s: n}
Denne syntaksen vil returnere en del av matrisen som begynner ved posisjon s og inneholder n gjenstander. Du kan utelate :n del å trekke ut alle elementer fra s til slutten av listen.
ekko ${city[@]:2:2}
# Milan New York
ekko ${city[@]:3}
# New York Roma
Bash har mange funksjoner, de tar bare litt læring
Arrays i bash kan ha begrensninger, men de tilbyr den samme grunnleggende funksjonaliteten som de fleste programmeringsspråk gjør. Selv om bash historisk sett har støttet bare enkle endimensjonale arrays, endrer tidene seg. Den nyeste versjonen av bash, 4, støtter assosiative matriser og negativ matriseindeksering.
Uansett hvilken versjon av bash du bruker, er det viktig å forstå nyansene. Selv normal variabel syntaks har mange særegenheter.
Bash-variabler forklart: En enkel veiledning med eksempler
Les Neste
Relaterte temaer
- Programmering
- Linux
- Programmering
- Linux Bash Shell
- Skripting
Om forfatteren
Bobby er en teknologientusiast som jobbet som programvareutvikler i det meste av to tiår. Hos MUO er han juniorredaktør for programmeringsseksjonen. Han er lidenskapelig opptatt av spill, jobber som sjefredaktør i Switch Player Magazine, og er fordypet i alle aspekter av online publisering og nettutvikling.
Abonner på vårt nyhetsbrev
Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis e-bøker og eksklusive tilbud!
Klikk her for å abonnere