Hvad er bash ordbøger på Linux, og hvordan bruger du dem?

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

Bash Dictionaries giver dig hash kort og associative arrays i Linux Shell scripts. Vi viser dig, hvordan du bruger disse kraftfulde og nyttige datastrukturer i dine egne Linux Shell-scripts.

En rose ved ethvert andet navn

Det formelle navn for ordbøger er associative arrays. De kaldes også hash tabeller og hash kort. De er en datastruktur, der fungerer på samme måde som en regelmæssig array, men med en betydelig forskel.

En matrix er en samling af dataværdier, der holdes i en datastruktur. For at få adgang til nogen af ​​dataværdierne, som er kendt som arrayelementer, skal du kende deres position i arrayet. Et arrayelements position i arrayet er kendt som dets indeks, så disse typer af arrays er kendt som indekserede arrays. De er den mest almindeligt anvendte type arrays.

Men de har en ulempe. Hvordan får du adgang til et arrayelement, hvis du ikke kender sin position inden for listen? Du skal løbe gennem alle elementerne i arrayet, teste for at se, om værdien på den pågældende placering er den, du leder efter.

Associative arrays overvinder dette problem. De bruger ikke heltal til entydigt at identificere arrayelementer. De bruger unikke ord kendt som nøgleord. Du kan hente værdien for et arrayelement ved at bruge sit søgeord, uanset hvor det er placeret inden for arrayet. Med et indekseret array er de heltalske tal, der repræsenterer positionerne inden for arrayet, i stigende rækkefølge. Søgeordene i et associativt array kan være i nogen rækkefølge.

Du kan slå en værdi i et associativt array ved at søge med sit søgeord. Kigger op et ord og hentning af dets tilknyttede værdi efterligner et ord i en ordbog og finder dens betydning. Derfor er associerede arrays kendt som ordbøger.

Bash 4.0 eller højere

Associative arrays understøttes i bash shell. version 4.0 eller højere. Hvis du bruger en nuværende Linux-distribution, skal du være i orden. For at kontrollere din bash-version skal du bruge denne kommando:

 Bash --Version 

Maskinen, der bruges til at undersøge denne artikel, har bash 5.1.4 installeret, så vi er gode til at gå.

Grundlæggende principper

For at oprette et associativt array på terminalkommandolinjen eller i et script, bruger vi kommandoen Bash Declare. Det -EN (Associative) Mulighed fortæller Bash, at dette vil være et associativt array og ikke et indekseret array.

 Declare -A akronymer 

Dette skaber et associativt array kaldet "akronymer".

For at sætte nogle data i vores array skal vi levere nøgleord og værdier. Vi kan gøre dette ved hjælp af dette format:

 Array-name [nøgle] = værdi 

Lad os tilføje nogle arrayelementer:

 Akronymer [ACK] = Bekræftelse 
 Akronymer [BGP] = "Border Gateway Protocol" 
 Akronymer [CIDR] = "Klasseløs inter-domæne routing" 
 Akronymer [DHCP] = "Dynamisk Host Configuration Protocol" 
 Akronymer [EOF] = "End of Frame" 

Disse kommandoer definerer fem arrayelementer. Bemærk, at værdierne er indpakket i citatmærker, hvis der er mellemrum i værdien. Vores søgeord blev indtastet i alfabetisk rækkefølge, men de kan indtastes i enhver rækkefølge, du kan lide. Søgeordene skal være unikke. Hvis du forsøger at oprette to poster med samme søgeord, vil den anden værdi, du indtaster, overskriver den første. Du har stadig kun en post med det pågældende søgeord, og det vil være forbundet med den anden værdi, du tilføjede.

For at hente værdier fra arrayet bruger vi kommandoer i dette format:

 $ {array-name [tast]} 

Vi kan bruge ECHO til at sende output til terminalvinduet:

 ECHO $ ​​{ACRONYMS [ACK]} 
 ECHO $ ​​{ACRONYMS [DHCP]} 

Ved hjælp af løkker

Arrays giver sig til at blive brugt i loops meget godt. Associative arrays er ingen undtagelse. Loops giver effektive måder at påberåbe sig en sekvens af handlinger uden gentagne sektioner af kode. Før vi ser på sløjfer, er der en effektiv måde at erklære arrays.

Vi skaber de arrays ved hjælp af erklære kommando (det samme -EN Mulighed som før), men vi leverer nøgleordene og værdier som en liste på kommandolinjen.

 DECLARE -A LANDER = ([ALB] = Albanien [BHR] = Bahrain [CMR] = Kamerun [DNK] = DANMARK [EGY] = Egypten) 

Array-navnet er "Lande", og det er forbundet med værdien af ​​et ligeværdigt tegn " = . " Værdilisten er indpakket i parenteser " () "Og hvert søgeord er indpakket i parentes" [] ". Bemærk, at der ikke er kommaer, der adskiller værdierne. Hvis du har en værdestreng, der indeholder mellemrum, skal du pakke den i citatmærker.

For at gøre et associativt array returnere et søgeord i stedet for værdien, tilføj et udråbstegn " ! "Foran af array-navnet. Den på symbolet " @ "Kan bruges som et wildcard, hvilket betyder alle arrayelementer.

Det her til Loop vil liste alle nøgleordene:

 For nøglen i "$ {! Lande [@]}"; gør ekko $ nøgle; gjort 

Bemærk, at nøgleordene ikke nødvendigvis er angivet i den rækkefølge, de blev oprettet, men det betyder ikke noget. Associative arrays stoler ikke på et bestilt indeks.

Vi kan også bruge parameterudvidelse til at liste alle nøgleordene. De vil blive noteret på en linje, ikke en pr. Linje.

 ECHO "$ {! Lande [@]}" 
 ECHO "$ {! Akronymer [@]}" 

Vi kan øge vores til loop for at udskrive søgeordene og værdier på samme tid.

 For nøglen i "$ {! Acronymer [@]}"; Gør ekko "$ nøgle - $ {akronymer [$ nøgle]}"; gjort 

Hvis vi vil vide, hvor mange elementer der er i arrayerne, kan vi bruge en hash "#" foran array-navnet i stedet for et udråbstegn.

 ECHO "$ {! Lande [@]}" 
 ECHO "$ {! Akronymer [@]}" 

Kontrollerer, at der findes et arrayelement

Hvis du søger efter et søgeord, men der ikke er noget sådant arrayelement, vil returværdien være en tom streng. Nogle gange er det nyttigt at have en anden indikator for tilstedeværelsen eller fraværet af et arrayelement.

Vi kan tjekke for tilstedeværelsen af ​​et arrayelement ved hjælp af " + _ "Operatør. Bemærk, at dette kommer efter søgeordet, ikke foran array-navnet som de tidligere operatører, vi har set.

 Hvis [$ {akronymer [EOF] + _}]; derefter ekko "fundet"; ellers ekko "ikke fundet"; fi 
 Hvis [$ {akronymer [ftp] + _}]; derefter ekko "fundet"; ellers ekko "ikke fundet"; fi 

Arrayelementet med søgeordet "EOF" findes i arrayet, men arrayelementet med søgeordet "FTP" er ikke.

Tilføjelse af arrayelementer

Tilføjelse af nye elementer til et associativt array er nemt. I modsætning til nogle programmeringssprog behøver du ikke at definere størrelsen på dit array, når du erklærer det. Du kan fortsætte med at tilføje nye elementer uden at ramme en foruddefineret øvre grænse.

For at tilføje et nyt element til arrayet bruger vi " + = "Operatør.

 lande + = ([FJI] = Fiji) 
 ECHO "$ (# lande [@]}" 
 ECHO $ ​​{LANDE [FJI]} 

Antallet af elementer i arrayet er nu seks, og søger efter det nye søgeord finder arrayelementet og returnerer sin værdi.

Fjernelse af arrayelementer og arrays

Det unsuT. Kommandoen bruges til at fjerne arrayelementer. Hvis søgeordet har mellemrum i det, skal du pakke det i citatmærker.

 UNSULED ACRONYMS [EOF] 
 Hvis [$ {akronymer [EOF] + _}]; derefter ekko "fundet"; ellers ekko "ikke fundet"; fi 

For at fjerne hele arrayet, brug unsuT. med navnet på arrayet.

 UNSET-lande 

Ved hjælp af variabler med arrays

Brug af variabler med associative arrays er ligetil. I dette eksempel indstiller vi en variabel nøgle til strengen "EOF." Vi bruger variablen, når vi tilføjer et nyt array-element til arrayet. Faktisk erstatter vi det arrayelement, som vi slettede tidligere.

Vi henter det nye arrayelement ved at kalde det med det nye søgeord og også ved at bruge variablen. Hvis søgeordet indeholder mellemrum, skal du pakke variabeltnavnet i citatmærker.

 Key = EOF 
 Akronymer [$ Key] = "End of Frame" 
 ECHO $ ​​{ACRONYMS [EOF]} 
 ekko $ {akronymer [$ nøgle]} 

Få Creative

Vores eksempler har været samlinger af oplysninger, hvor hvert arrayelement er uafhængigt af alle de andre, ligesom en ordbog. Hver enkelt er en unik definition. Men associative arrays kan lige så nemt holde en række oplysninger, der alle er relateret til en ting, såsom specifikationerne for forskellige stykker computerhardware:

 Declare -E-specifikation 
 Specifikation [CPU] = "Dual Core Amd Ryzen 5 3600" 
 Specifikation [Speed] = "3600 MHz" 
 Specifikation [kernel] = "5.11.0-17-generisk x86_64" 
 Specifikation [MEM] = "1978.5 MIB" 
 Specifikation [Opbevaring] = "32 GIB" 
 Specifikation [Shell] = "Bash" 
 ECHO $ ​​{Specifikation [CPU]} 

Skrive effektivt på et sprog betyder at kende de mekanismer og strukturer, den tilbyder, og vælge den mest hensigtsmæssige til det problem, du forsøger at løse. Associative arrays giver dig en nem at bruge måde at lagre data, som du kan søge efter navn, ligesom en ordbog.


Linux - Mest populære artikler

Sådan installeres Signal Desktop på Linux

Linux Jan 22, 2025

Eliseu Geisler / Shutterstock.com Signal er Privacy-fokuserede smartphone messaging app alle synes at bruge . Du kan også bruge signal p..


De bedste Linux-distributioner uden SystemD

Linux Feb 24, 2025

BMJ / Shutterstock.com. Når de dominerende Linux-distributioner vedtages Systemd. , dissenters forked distributioner og startede nye projekter. Så..


Docker til begyndere: Alt du behøver at kende

Linux Jun 15, 2025

Docker. Opretter pakkede applikationer kaldet containere. Hver beholder giver et isoleret miljø svarende til en Virtual Machine. (Vm). I modsætning til VMS..


5 Specialiserede Linux-distributioner med unikke funktioner

Linux Jul 20, 2025

Læsning gennem den tegneseriefulde lange liste over eksisterende Linux-distro, de forskellige smagsstoffer og off-shoots af off-shoots alle begynder at sløre sammen. For at afhjælpe det..


Hvad er nyt i Elementary OS 6 "Odin"

Linux Aug 14, 2025

elementær, Inc. Der er mange Linux-distributioner (distributioner), at folk hævder er gode erstatninger for Windows eller MacOS. Men der er få, der har at..


Native spil på Linux kan være døende, og det er okay

Linux Sep 27, 2025

DC Studio / Shutterstock.com Det Dampdæk , annonceret i august 2021, har Linux Gaming Circles, der taler om fremtiden for Gaming på Linux. Dækket..


Hvad er nyt i Linux Kernel 5.14

Linux Sep 9, 2025

Sean Locke Fotografi / Shutterstock Da Linux bliver 30 år gammel, er kernel 5.14 blevet frigivet. Den indeholder det sædvanlige brede udbud af interne under-..


Sådan angiver miljøvariabler på Linux

Linux Oct 31, 2025

På Linux har miljøvariabler vigtige værdier og indstillinger. Scripts, applikationer og skaller læser disse værdier, ofte for at konfigurere sig selv eller for at kontrollere deres opførs..


Kategorier