Hva Are Bash Ordbøker på Linux, og hvordan bruker du dem?

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

Bash ordbøker gir deg hash kart og associative arrays i Linux Shell Scripts. Vi viser deg hvordan du bruker disse kraftige og nyttige datastrukturene i dine egne Linux Shell-skript. [1. 3]

En rose av noe annet navn

[1. 3]

Det formelle navnet på ordbøker er assosiative arrays. De heter også Hash Tables og Hash Maps. De er en datastruktur som fungerer på samme måte som en vanlig matrise, men med en betydelig forskjell.

En matrise er en samling dataverdier som holdes i en datastruktur. For å få tilgang til noen av dataverdiene, som er kjent som arrayelementer, må du kjenne sin posisjon i arrayet. Et arrayelementets posisjon i arrayet er kjent som indeksen, slik at disse typer arrays er kjent som indekserte arrays. De er den mest brukte typen arrays. [1. 3]

Men de har en ulempe. Hvordan får du tilgang til et arrayelement hvis du ikke kjenner sin posisjon i listen? Du må løpe gjennom alle elementene i arrayet, testing for å se om verdien på den plasseringen er den som du leter etter. [1. 3]

Associative arrays overvinnes det problemet. De bruker ikke heltall for å unikt identifisere arrayelementer. De bruker unike ord kjent som søkeord. Du kan hente verdien for et arrayelement ved å bruke søkeordet, uavhengig av hvor den er plassert i gruppen. Med et indeksert array er heltallnummerene som representerer stillingene i arrayet i stigende rekkefølge. Søkeordene i et assosiert array kan være i hvilken som helst rekkefølge. [1. 3]

Du kan slå opp en verdi i et assosiativt utvalg ved å søke med sitt søkeord. Ser opp et ord og henter sin tilknyttede verdi etterligner, ser et ord i en ordbok og finner sin mening. Derfor er associative arrays kjent som ordbøker. [1. 3]

Bash 4,0 eller høyere

Associative arrays støttes i Bash Shell. versjon 4.0 eller høyere. Hvis du bruker en nåværende Linux-distribusjon, bør du ha det bra. For å sjekke bash-versjonen, bruk denne kommandoen: [1. 3]

 Bash --Version 

[1. 3]

Maskinen som brukes til å undersøke denne artikkelen har bash 5.1.4 installert, så vi er gode å gå. [1. 3]

Grunnleggende prinsipper

For å opprette et assosiativt utvalg på terminalkommandolinjen eller i et skript, bruker vi Bash-erklære kommandoen. De -EN (Associative) -alternativet forteller Bash at dette vil være et assosiativt array og ikke en indeksert matrise. [1. 3]

 Erklære -A akronymer 

[1. 3]

Dette skaper en assosiativ matrise som heter "akronymer". [1. 3]

For å sette noen data i vår matrise må vi levere søkeord og verdier. Vi kan gjøre dette ved å bruke dette formatet: [1. 3]

 Array-Name [Key] = Verdi 

La oss legge til noen arrayelementer: [1. 3]

 Akronymer [ACK] = Bekreftelse 
 akronymer [bgp] = "Border Gateway Protocol" 
 akronymer [cidr] = "klasseløs inter-domene ruting" 
 akronymer [DHCP] = "Dynamic Host Configuration Protocol" 
 akronymer [EOF] = "End of Frame" 

[1. 3]

Disse kommandoene definerer fem arrayelementer. Merk at verdiene er innpakket i anførselstegn hvis det er mellomrom i verdien. Våre søkeord ble lagt inn i alfabetisk rekkefølge, men de kan skrives inn i en hvilken som helst rekkefølge du liker. Søkeordene må være unike. Hvis du prøver å opprette to oppføringer med det samme søkeordet, vil den andre verdien du angir, overskrive den første. Du har fortsatt bare en oppføring med det søkeordet, og det vil bli knyttet til den andre verdien du har lagt til. [1. 3]

For å hente verdier fra arrayet bruker vi kommandoer i dette formatet: [1. 3]

 $ {array-navn [nøkkel]} 

Vi kan bruke ekko til å sende utdataet til terminalvinduet: [1. 3]

 ekko $ {akronymer [ACK]} 
 ekko $ {akronymer [dhcp]} 

[1. 3]

Bruker løkker

Arrays gir seg til å bli brukt i løkker veldig bra. Associative arrays er ikke noe unntak. Loops gir effektive måter å påkalle en sekvens av handlinger uten repeterende deler av koden. Før vi ser på løkker, er det en effektiv måte å erklære arrays på. [1. 3]

Vi lager arrays ved hjelp av erklære kommando (det samme -EN Alternativ som før), men vi gir søkeordene og verdiene som en liste på kommandolinjen. [1. 3]

 Deklare -A-land = ([Alb] = Albania [BHR] = Bahrain [CMR] = Kamerun [DNK] = Danmark [Egy] = Egypt) 

Array Name er "land", og den er koblet til verdienslisten av et likeverdig tegn " =. . " Verdi-listen er innpakket i parenteser " () "Og hvert søkeord er innpakket i parentes" [] ". Vær oppmerksom på at det ikke er noen kommaer som skiller verdiene. Hvis du har en verdistreng som inneholder mellomrom, må du vikle den i anførselstegn. [1. 3]

[1. 3]

For å gjøre en Associative Array returnere et søkeord i stedet for verdien, legg til et utropspunkt " ! "Foran navnet på arrayet. På symbolet " @ "Kan brukes som et jokertegn, som betyr alle arrayelementer. [1. 3]

Dette til Loop vil liste alle søkeordene: [1. 3]

 For nøkkel i "$ {! Land [@]}"; Gjør ekko $ nøkkel; gjort 

[1. 3]

Vær oppmerksom på at søkeordene ikke nødvendigvis er oppført i den rekkefølgen de ble opprettet, men det spiller ingen rolle. Associative arrays stole ikke på en bestilt indeks. [1. 3]

Vi kan også bruke parameterutvidelse til å liste alle søkeordene. De blir oppført på en linje, ikke en per linje. [1. 3]

 ekko "$ {! Land [@]}" 
 ekko "$ {! Acronymer [@]}" 

[1. 3]

Vi kan øke vår til Loop for å skrive ut søkeordene og verdiene samtidig. [1. 3]

 For nøkkel i "$ {! Akronymer [@]}"; Gjør ekko "$ nøkkel - $ {akronymer [$ nøkkel]}"; gjort 

[1. 3]

Hvis vi vil vite hvor mange elementer som er i arrays, kan vi bruke en hash "#" foran array-navnet i stedet for et utropstegn. [1. 3]

 ekko "$ {! Land [@]}" 
 ekko "$ {! Acronymer [@]}" 

[1. 3]

Kontroller at et arrayelement eksisterer

Hvis du søker etter et søkeord, men det er ikke noe annet arrayelement, vil returverdien være en tom streng. Noen ganger er det nyttig å ha en annen indikator for nærvær eller fravær av et arrayelement. [1. 3]

Vi kan sjekke for tilstedeværelsen av et arrayelement ved hjelp av " + _ "Operatør. Vær oppmerksom på at dette kommer etter søkeordet, ikke foran arrayavnet som de forrige operatørene vi har sett. [1. 3]

 Hvis [$ {akronymer [EOF] + _}]; så ekko "funnet"; ellers ekko "ikke funnet"; fi 
 Hvis [$ {akronymer [ftp] + _}]; så ekko "funnet"; ellers ekko "ikke funnet"; fi 

[1. 3]

Arrayelementet med søkeordet "EOF" finnes i arrayet, men arrayelementet med søkeordet "FTP" er ikke. [1. 3]

Legge til arrayelementer

Å legge til nye elementer i et assosiativt array er enkelt. I motsetning til noen programmeringsspråk, trenger du ikke å definere størrelsen på din matrise når du erklærer det. Du kan fortsette å legge til nye elementer uten å treffe en forhåndsdefinert øvre grense. [1. 3]

For å legge til et nytt element i arrayet, bruker vi " + = "Operatør. [1. 3]

 land + = ([FJI] = Fiji) 
 ekko "$ (# land [@]}" 
 ekko $ {land [fji]} 

[1. 3]

Antallet av elementer i arrayet er nå seks, og søker etter det nye søkeordet finner arrayelementet og returnerer verdien. [1. 3]

Fjerner arrayelementer og arrays

De Unset. kommandoen brukes til å fjerne arrayelementer. Hvis søkeordet har mellomrom i den, pakk den inn i anførselstegn. [1. 3]

 Unset AcronyMs [EOF] 
 Hvis [$ {akronymer [EOF] + _}]; så ekko "funnet"; ellers ekko "ikke funnet"; fi 

[1. 3]

For å fjerne hele arrayet, bruk Unset. med navnet på arrayet. [1. 3]

 Unset-land 

[1. 3]

Bruker variabler med arrays

Bruk av variabler med associative arrays er grei. I dette eksemplet vil vi sette en variabel nøkkel til strengen "EOF". Vi bruker variabelen når vi legger til et nytt arrayelement i gruppen. Faktisk erstatter vi arrayelementet som vi slettet tidligere. [1. 3]

Vi henter det nye arrayelementet ved å ringe det med det nye søkeordet og også ved å bruke variabelen. Hvis søkeordet inneholder mellomrom, må du vikle det variable navnet i anførselstegn. [1. 3]

 nøkkel = EOF 
 akronymer [$ nøkkel] = "End of ramme" 
 ekko $ {akronymer [eOf]} 
 ekko $ {akronymer [$ nøkkel]} 

[1. 3]

Bli kreativ

Våre eksempler har vært samlinger av informasjon der hvert arrayelement er uavhengig av alle de andre, som en ordbok. Hver og en er en unik definisjon. Men associative arrays kan like enkelt holde en rekke deler av informasjon som er relatert til en ting, for eksempel spesifikasjonene til forskjellige deler av maskinvare: [1. 3]

 Erklære-en spesifikasjon 
 Spesifikasjon [CPU] = "Dual Core AMD Ryzen 5 3600" 
 Spesifikasjon [Speed] = "3600 MHz" 
 SPESIFIKASJON [KERNEL] = "5.11.0-17-GENERIC X86_64" 
 Spesifikasjon [MEM] = "1978.5 MIB" 
 Spesifikasjon [Lagring] = "32 GIB" 
 Spesifikasjon [Shell] = "Bash" 
 ekko $ {spesifikasjon [CPU]} 

[1. 3]

Å skrive effektivt på et språk betyr å vite mekanismene og strukturene som den tilbyr, og velge den mest hensiktsmessige for problemet du prøver å løse. Associative arrays gir deg en brukervennlig måte å lagre data som du kan søke etter navn, akkurat som en ordbok. [1. 3]


Linux - Mest populære artikler

Slik installerer Signal Desktop på Linux

Linux Jan 22, 2025

Eliseu Geisler / Shutterstock.com [1. 3] Signal er Den personvern-fokuserte smartphone messaging appen alle synes å være å bruke . D..


Den beste Linux-distribusjoner Uten systemd

Linux Feb 24, 2025

BMJ / Shutterstock.com. Når de dominerende Linux-distribusjonene vedtok systemd. , disceders gaffed distribusjoner og startet nye prosjekter. Så h..


Hva er nytt i Debian 11 “Bullseye”

Linux Jul 22, 2025

Debian. , Progenitor av mange andre Linux-distribusjoner, har utført frigjøring 11 tilgjengelig i testfasen. Veier du dydene til oppgradering, eller er du bare nysgjerrig på ..


Hvordan logge ut av Mac Bruke Terminal

Linux Aug 8, 2025

Apple gjør det enkelt å logge ut av Macen din med alternativet i skrivebordets menylinje. Men det er også et par kommandoer du kan bruke til å logge ut med Terminal, som vi vil oppda..


Slik installerer Linux på en M1 Mac Med Apple Silicon

Linux Nov 11, 2024

Native Linux-støtte til Apples nye armbaserte arkitektur er ikke klar, men du kan kjøre Linux på en M1. , M1 pro, eller m1 maks ved hjelp av a virtuell maskin . De..


Hvordan legge til en bruker i Sudoers -filen i Linux

Linux Oct 30, 2025

Hvis en sudo Kommando på Linux får deg en melding om at en bruker "ikke er i Sudoers -filen," må du komme på "Sudoers" -listen. Vi vil gå gjennom å legge til en bruker til sudo..


7 feil nye Linux -brukere gjør (og hvordan du kan unngå dem)

Linux Nov 11, 2024

Å lære Linux kan være en frustrerende opplevelse der alt det lille føles som en kamp. Å unngå disse vanlige feilene vil gjøre introduksjonen og adopsjonen av Linux mye enklere og mindre ..


Hvordan liste Linux -tjenester med SystemCTL

Linux Oct 18, 2025

Linux -datamaskinen din er avhengig av mange bakgrunnsoppgaver som kalles tjenester eller demoner. På SystemD-baserte distribusjoner har du innebygde kommandoer som lar deg se hvilke tjenester..


Kategorier