Som de flesta programmeringsspråk behöver bash-skript ibland hantera en lista med relaterade värden. Den enklaste formen är standardarrayen.
I bash är array-programmering ganska annorlunda, särskilt när det kommer till syntax. Bash-arrayer är också strikt endimensionella, men de har fortfarande många användningsområden.
Den grundläggande syntaxen för Bash-arrayer
Att skapa en array i bash är enkelt. Du kan initiera en hel array med parenteser, till exempel:
city=(London Paris Milano "New York")
(Du kan hitta all kod från detta stadsexempel i denna GitHub Gist.)
Detta skapar en array som innehåller fyra element, indexerade från 0 till 3. Observera att det fjärde värdet är en sträng med citattecken som består av två ord. Du måste citera värden som innehåller mellanslag för att klargöra att de inte är separata värden.
Du kan komma åt ett enskilt element med hjälp av parentessyntaxen som är vanlig för programmeringsspråk:
stad[2]
Eftersom det här är bash, behöver du ett par förbättringar för att faktiskt använda värdet i ett uttryck:
- Du måste ange dollartecknet ($) till variabelnamnet.
- Du måste också använda hängslen ({}) för att göra variabelnamnet entydigt. Som standard kommer bash att behandla $city[2] som en variabel som heter stad. Lägg till hängslen för att berätta för bash att utvärdera parenteser och indexnummer också.
Standardbash array-åtkomstsyntaxen är då:
${variabelnamn[index]}
Här är ett komplett exempel:
#!/bin/bash
city=(London Paris Milano "New York")
echo ${city[3]}
# New York
Istället för att initiera en array på en gång kan du tilldela den steg för steg. Det här skriptet är en längre motsvarighet till föregående exempel:
#!/bin/bash
stad[0]=London
stad[1]=Paris
stad[2]=Milano
stad[3]="New York"
echo ${city[3]}
# New York
Observera att du i båda fallen måste vara försiktig så att du inte lägger till något mellanslag runt likhetstecknet. "stad[0] = London", med mellanslag runt likhetstecknet, kommer att generera ett fel.
Fler användningsområden för Bash Arrays
Arrayer är perfekta för att lagra relaterad data. Här är ett (mycket begränsat) skalskript för att få kvadratroten av ett tal:
#!/bin/bash
sqrt[1]=1
sqrt[4]=2
sqrt[9]=3
sqrt[16]=4
sqrt[25]=5
echo ${sqrt[$1]}
Observera att skriptet använder värdet $1 som arrayindex. $1 representerar det första kommandoradsargumentet som skriptet tar emot, så du kan köra det här skriptet så här:
$ ./sqrt.sh 9
3
Du kanske är medveten om $(cmd) syntax för att utföra ett kommando och spara dess utdata i en variabel. Du kan kombinera detta med arrayinitieringssyntaxen för att få en mängd filer att arbeta med:
arr=( $(ls) )
En array är ofta en perfekt datastruktur för iterering och Bash är inget undantag. Du kan gå igenom en array för att skriva ut varje element eller för att utföra en operation på varje medlem.
Du kan adressera en array i a för.. i slinga, för att iterera över dess innehåll. Till exempel, här är en enkel slinga som skriver ut antalet rader i varje fil i arrayen arr:
för fil i "${arr[@]}"; do
wc -l "$file"
Gjort
# 3 envvars
# 547 httpd.conf
# ...
Observera att detta mönster använder sig av @ symbol för att hämta alla element från arrayen.
Mer Bash Array Syntax
Du kan få antalet objekt i en array genom att använda följande:
echo ${#city[@]}
# 4
Du kan lägga till ett nytt element i slutet av en standardarray så här:
arr+=(4)
Så för att lägga till en femte stad till listan:
stad+=(Rom)
echo ${city[@]}
# London Paris Milano New York Rom
För att extrahera en bit av en array kan du använda en syntax som approximerar segmentoperationen för många andra språk:
${arr[@]:s: n}
Denna syntax kommer att returnera en del av arrayen som börjar vid position s och innehållande n föremål. Du kan utelämna :n del att extrahera alla föremål från s till slutet av listan.
echo ${city[@]:2:2}
# Milan New York
echo ${city[@]:3}
# New York Rom
Bash har många funktioner, de tar bara lite lärdom
Arrayer i bash kan ha begränsningar, men de erbjuder samma grundläggande funktionalitet som de flesta programmeringsspråk gör. Även om bash historiskt sett har stött enkla endimensionella arrayer, förändras tiderna. Den senaste versionen av bash, 4, stöder associativa arrayer och negativ arrayindexering.
Vilken version av bash du än använder är det viktigt att förstå dess nyanser. Även normal variabel syntax har massor av egenheter.
Bash-variabler förklaras: En enkel guide med exempel
Läs Nästa
Relaterade ämnen
- Programmering
- Linux
- Programmering
- Linux Bash Shell
- Skript
Om författaren

Bobby är en teknikentusiast som arbetat som mjukvaruutvecklare under de flesta av två decennier. På MUO är han juniorredaktör för programmeringssektionen. Han brinner för spel, arbetar som chefredaktör på Switch Player Magazine och är fördjupad i alla aspekter av onlinepublicering och webbutveckling.
Prenumerera på vårt nyhetsbrev
Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!
Klicka här för att prenumerera