Vilka är Bash ordböcker på Linux, och hur du använder dem?

Jun 16, 2025
Linux
fatmawati achmad zaenuri / shutterstock.com

Bash-ordböcker ger dig hash-kartor och associativa arrays i Linux Shell-skript. Vi visar hur du använder dessa kraftfulla och användbara datastrukturer i dina egna Linux Shell-skript.

En ros med något annat namn

Det formella namnet för ordböcker är associativa arrays. De kallas också hash tabeller och hash kartor. De är en datastruktur som fungerar på samma sätt som en vanlig array, men med en signifikant skillnad.

En array är en samling datavärden som hålls i en datastruktur. För att få tillgång till något av datavärdena, som är kända som arrayelement, behöver du veta deras position i matrisen. Ett matriselement i arrayen är känt som sitt index, så dessa typer av arrays är kända som indexerade arrays. De är den vanligaste typen av arrays.

De har dock en nackdel. Hur får du tillgång till ett arrayelement om du inte känner till sin position inom listan? Du måste springa igenom alla element i matrisen, testning för att se om värdet på den platsen är den som du letar efter.

Associativa arrays övervinner den frågan. De använder inte heltal för att unikt identifiera matriselement. De använder unika ord som kallas nyckelord. Du kan hämta värdet för ett arrayelement med hjälp av sitt sökord, oavsett var den är placerad i arrayen. Med en indexerad array är heltalsnumren som representerar positionerna i arrayen i stigande ordning. Nyckelord i en associativ array kan vara i vilken ordning som helst.

Du kan leta upp ett värde i en associativ array genom att söka med sitt sökord. Letar upp ett ord och hämtar dess associerade värde mimics tittar upp ett ord i en ordlista och hitta sin mening. Därför är associativa arrays kända som ordböcker.

Bash 4,0 eller högre

Associativa arrays stöds i Bash Shell version 4.0 eller högre. Om du använder en aktuell Linux-distribution, borde du vara bra. För att kontrollera din bash-version, använd det här kommandot:

 Bash - version 

Maskinen som används för att undersöka den här artikeln har bash 5.1.4 installerad, så vi är bra att gå.

Grundläggande principer

För att skapa en associativ array på den terminala kommandoraden eller i ett skript, använder vi Bash-deklarationen. De -A (Associativ) Alternativ berättar Bash att detta kommer att vara en associativ array och inte en indexerad array.

 Förklara -A-akronymer 

Detta skapar en associativ array som heter "akronymer".

För att sätta vissa data i vår array måste vi tillhandahålla sökord och värderingar. Vi kan göra detta med det här formatet:

 Array-Namn [tangent] = värde 

Låt oss lägga till några arrayelement:

 Acronyms [ACK] = Bekräftelse 
 Acronyms [BGP] = "Border Gateway Protocol" 
 Acronyms [cidr] = "Classless inter-domain routing" 
 Acronyms [DHCP] = "Dynamisk värdkonfigurationsprotokoll" 
 akronymer [EOF] = "Slut på ramen" 

De kommandon definierar fem arrayelement. Observera att värdena är inslagna i citattecken om det finns mellanslag i värdet. Våra nyckelord har skrivits in i alfabetisk ordning, men de kan anges i vilken ordning du vill ha. Nyckelorden måste vara unika. Om du försöker skapa två poster med samma sökord, skrivs det andra värdet som du anger det första. Du har fortfarande bara en post med det sökordet, och det kommer att vara associerat med det andra värdet som du lagt till.

För att hämta värden från arrayen använder vi kommandon i detta format:

 $ {ARRAY-NAME [KEY]} 

Vi kan använda ECHO för att skicka utgången till terminalfönstret:

 Echo $ {Acronyms [ACK]} 
 Echo $ {Acronyms [DHCP]} 

Med hjälp av loopar

Arrayer lämpar sig för att användas i slingor mycket väl. Associativa arrayer är inget undantag. Loops ger effektiva sätt att åberopa en följd av åtgärder utan repetitiva delar av koden. Innan vi tittar på loopar, finns det ett effektivt sätt att deklarera matriser.

Vi skapar arrayer med hjälp av deklarera kommandot (samma -A alternativ som tidigare), men vi ger de sökord och värden som en lista på kommandoraden.

 förklara -A länder = ([ALB] = Albanien [BHR] = Bahrain [CMR] = Kamerun [DNK] = Danmark [EGY] = Egypten) 

Matrisen heter ”länder”, och den är ansluten till värdelistan med ett likhetstecken” = . Värdelistan är insvept inom parentes ” () ”Och varje sökord är insvept i parentes” [] ”. Observera att det inte finns några kommatecken separera värdena. Om du har ett värde sträng som innehåller mellanslag, måste du packa in den i citattecken.

För att göra en associativ array tillbaka ett sökord i stället för värdet, lägga ett utropstecken ” ! ”Framför arrayen namn. Den vid symbolen ” @ ”Kan användas som ett jokertecken, vilket betyder alla gruppelement.

Detta för loop kommer att lista alla nyckelord:

 för knappa in "$ {länder [@]!}"; gör echo $ nyckel; gjort 

Observera att sökorden inte nödvändigtvis är listade i den ordning som de skapades, men det spelar ingen roll. Associativa arrayer inte lita på en ordnad index.

Vi kan också använda parameter expansionen för att lista alla sökord. De kommer att visas på en rad, inte ett per rad.

 echo "$ {! Länder [@]}" 
 echo "$ {! Akronymer [@]}" 

Vi kan öka vår för slinga för att skriva ut nyckelord och värden samtidigt.

 för nyckeln i "$ {akronymer [@]!}"; gör echo "$ nyckel - $ {akronymer [$ key]}"; gjort 

Om vi ​​vill veta hur många element som finns i matriserna, kan vi använda en hash ”#” framför matrisen namn istället för ett utropstecken.

 echo "$ {! Länder [@]}" 
 echo "$ {! Akronymer [@]}" 

Kontrollera att en Array Element Finns

Om du söker efter ett sökord, men det finns ingen sådan array element, kommer returvärdet vara en tom sträng. Ibland är det användbart att ha en annan indikator för närvaro eller frånvaro av ett grupperingselement.

Vi kan kontrollera förekomsten av ett fältelement med hjälp av ” + _ ”Operatör. Observera att detta kommer efter nyckelordet, inte framför arrayen namn som de tidigare operatörerna vi har sett.

 Om [$ {akronymer [EOF] + _}]; sedan echo "hittades"; annars echo "Not found"; fi 
 Om [$ {akronymer [FTP] + _}]; sedan echo "hittades"; annars echo "Not found"; fi 

Arrayen element med nyckelordet ”EOF” finns i arrayen, men arrayelementet med sökordet ”FTP” inte är.

Tillsats arrayelement

Tillägg av nya delar till en associativ array är lätt. Till skillnad från vissa programmeringsspråk, behöver du inte definiera storleken på din array när du förklara den. Du kan fortsätta att lägga till nya element utan att slå ett fördefinierat övre gräns.

För att lägga till ett nytt element i arrayen, använder vi ” + = ”Operatör.

 länder + = ([FJI] = Fiji) 
 echo "$ (# länder [@]}" 
 echo $ {länder [FJI]} 

Antalet element i arrayen är nu sex, och söker efter den nya sökordet finner arrayen elementet och returnerar dess värde.

Ta bort arrayelement och matriser

De oskränkt Kommandot används för att avlägsna arrayelementen. Om sökordet har utrymmen i den, linda in det i citattecken.

 oskränkt akronymer [EOF] 
 Om [$ {akronymer [EOF] + _}]; sedan echo "hittades"; annars echo "Not found"; fi 

Att ta bort hela arrayen, användning oskränkt med namnet på arrayen.

 oskränkta länder 

Använda variabler med arrayer

Använda variabler med associativa arrayer är okomplicerad. I det här exemplet kommer vi att ställa in en variabel nyckel till strängen ”EOF”. Vi kommer att använda variabeln när vi lägger till en ny array element i arrayen. Egentligen vi ersätta matrisen element som vi bort tidigare.

Vi hämtar det nya arrayelementet genom att ringa det med det nya sökordet och också med hjälp av variabeln. Om sökordet innehåller mellanslag måste du fälla det variabla namnet i citattecken.

 Key = EOF 
 Acronyms [$-nyckel] = "Slut på ramen" 
 Echo $ {Acronyms [EOF]} 
 Echo $ {Acronyms [$ Key]} 

Bli kreativitet

Våra exempel har varit samlingar av information där varje arrayelement är oberoende av alla andra, mycket som en ordbok. Var och en är en unik definition. Men associativa arrays kan lika enkelt hålla en mängd olika bitar av information som är relaterade till en sak, till exempel specifikationerna för olika bitar av datorhårdvara:

 Förklara -A-specifikationen 
 Specifikation [CPU] = "Dual Core AMD RYZEN 5 3600" 
 Specifikation [Speed] = "3600 MHz" 
 Specifikation [kärna] = "5.11.0-17-generisk X86_64" 
 Specifikation [MEM] = "1978.5 MIB" 
 Specifikation [Förvaring] = "32 GIB" 
 Specifikation [Shell] = "Bash" 
 Echo $ {Specifikation [CPU]} 

Skriva effektivt på ett språk innebär att man känner till de mekanismer och strukturer som den erbjuder och väljer den mest lämpliga för det problem du försöker lösa. Associativa arrays ger dig ett lättanvänt sätt att lagra data som du kan söka efter namn, precis som en ordbok.


Linux - Mest populära artiklar

Hur att hitta och ta bort brutna Symlinks på Linux

Linux Nov 12, 2024

Fatmawati Achmad Zaenuri / Shutterstock De symboliska länkarna på Linux är en fantastisk funktion, men de kan bli trasiga och lämnade pekar på ingenting..


The Best Linux-distributioner Utan SYSTEMD

Linux Feb 24, 2025

Bmj / shutterstock.com När de dominerande Linux-distributionerna antogs systemd , Dissenters forked distributioner och startade nya projekt. Så va..


Vad är ”root” på Linux?

Linux Jul 7, 2025

fatmawati achmad zaenuri / shutterstock.com Rotanvändaren är den mest kraftfulla enheten i Linux-universum med obegränsade krafter, för bättre eller sä..


Hur hämtar du och installerar ånga på Linux

Linux Oct 9, 2025

Postmodern studio / shutterstock.com Så, du vill prova spel på Linux ? I den här artikeln, låt oss titta på hur du installerar ånga på någon..


Hur uppdaterar Fedora Linux

Linux Nov 10, 2024

Så, du äntligen laddat ner och installerade Fedora Linux, men nu kan du undra, hur håller du ditt system uppdaterat? Tack och lov, Fedora ger dig ett par metoder för systemuppdateringa..


Hur man listar miljövariabler på Linux

Linux Oct 31, 2025

På Linux har miljövariabler viktiga värden och inställningar. Skript, applikationer och skal läser dessa värden, ofta för att konfigurera sig själva eller för att kontrollera deras bet..


Hur man ställer in en statisk IP -adress i Ubuntu

Linux Oct 17, 2025

Ditt hemnätverk förlitar sig på IP -adresser för att dirigera data mellan enheter, och ibland kan du ändra en enhets adress. Så här ger du en Ubuntu Linux -dator en permanent IP -adress ..


7 misstag nya Linux -användare gör (och hur man undviker dem)

Linux Nov 11, 2024

Att lära sig Linux kan vara en frustrerande upplevelse där allt litet sak känns som en strid. Att undvika dessa vanliga misstag kommer att göra din introduktion och antagande av Linux mycke..


Kategorier