Hvordan bruke indeksmatriser i bash

Hvordan bruke indeksmatriser i bash
Bash gir støtte for indekserte matriser, som i hovedsak er lister over elementer som kan nås ved hjelp av indeksnummeret. Indekserte matriser er spesielt nyttige når du vil lagre og manipulere mange relaterte verdier, les denne artikkelen videre for å lære hvordan du bruker indeksarrays.

Hva er indeksmatriser

Indekserte matriser er en samling av elementer i bash som kan nås ved hjelp av en indeks eller en nøkkel. Disse matriser kan brukes til å lagre og hente data i en bestemt rekkefølge, noe som gjør det lettere å administrere store datamengder. Syntaksen for å erklære en indeksert matrise i bash er som følger:

= (Element1 Element2 Element3 ...)

Her er array_name navnet på matrisen, og element1, element2, element3 og så videre er verdiene som skal lagres i matrisen. Verdiene er atskilt med Whitespace og merk at du også kan bruke deklar -kommandoen til å opprette en matrise.

Hvordan bruke indekserte matriser i bash

For å opprette en indeks -matrise i bash, trenger du ganske enkelt å erklære en variabel og tilordne den verdier vedlagt i parentes og atskilt med mellomrom. Her er få eksempler som viser hvordan du bruker indekserte matriser i bash:

  • Ombestille en liste
  • Filtrere en liste
  • Teller forekomster
  • Oppdaterer en liste

Ombestille en liste i bash

Hvis du har en liste over elementer i en viss rekkefølge og vil omorganisere dem på en annen måte. Du kan bruke en indeksoppstilling for å opprette en ny ordre for varene, som følger:

#!/bin/bash
elementer = ("mango" "ananas" "Strawberry" "Cherry" "druer")
ordre = (4 2 0 3 1)
for jeg i "$ ordre [@]"
gjøre
ekko $ elementer [$ i]
Ferdig

I dette eksemplet lager vi en matrise som heter elementer med fem elementer. Vi oppretter også en indeks -matrise som heter ordre, som spesifiserer en ny ordre for varene. Vi sløyfe deretter gjennom bestillingsarrayen og bruker hver verdi som en indeks for å hente det tilsvarende elementet fra varene og skrive ut den.

Filtrere en liste i bash

Hvis du har en liste over elementer og vil filtrere ut visse elementer basert på en tilstand. Du kan bruke en indeks -matrise for å holde rede på indeksene på elementene som oppfyller tilstanden, som følger:

#!/bin/bash
elementer = ("mango" "ananas" "Strawberry" "Cherry" "druer")
indekser = ()
for jeg i "$ !elementer [@] "
gjøre
if [[$ elementer [$ i] == * "r" *]]
deretter
Indekser+= ($ i)
fi
Ferdig
for jeg i "$ indeks [@]"
gjøre
ekko $ elementer [$ i]
Ferdig

I dette eksemplet lager vi en matrise som heter elementer med fem elementer. Vi oppretter også en tom indeks -matrise som heter indekser. Vi sløyfe deretter gjennom gjenstandene og sjekker om hvert element inneholder bokstaven "R". Hvis det gjør det, legger vi indeksen til indekserutstyret. Til slutt sløyfe vi gjennom indeksene og bruker hver verdi som en indeks for å hente det tilsvarende elementet fra varenes matrise og skrive ut det.

Teller forekomster i bash

Hvis du har en liste over elementer og du vil telle antall forekomster av hvert element, kan du bruke en indeksopprett for å holde rede på tellingene, og her er et eksempel for demonstrasjon:

#!/bin/bash
elementer = ("mango" "ananas" "Strawberry" "Cherry" "druer")
teller = ()
for jeg i "$ !elementer [@] "
gjøre
Hvis [[[ ! "$ teller [@]" = ~ "$ elementer [$ i]"]]
deretter
teller+= ("$ elementer [$ i] 1")
ellers
indeks = $ (ekko "$ teller [@]" | tr "'\ n' | grep -n"^$ elementer [$ i] "| cu)
Count = $ (Echo "$ Counts [$ index -1]" | cut -d "-f2)
teller [$ index-1] = "$ items [$ i] $ ((teller+1))"
fi
Ferdig
for telling i "$ teller [@]"
gjøre
ekko $ telling
Ferdig

Den initialiserer først en matrise kalt "elementer" med en liste over strenger. Deretter erklærer det en tom matrise kalt "Countts". A for loop opprettes for å iterere for hvert element i "elementene" -arrayen, og for hvert element sjekker den om det allerede finnes i "Countts" -arrayen.

Hvis den ikke eksisterer, legger den til varen og antallet 1 til "teller" -arrayen. Hvis det eksisterer, øker det antallet av den varen i "teller" -arrayen. Til slutt, for å skrive ut hvert element og dets tilsvarende teller en annen for loop brukes. Utgangen til denne koden vil skrive ut antallet hvert element i "elementene" -arrayen, med duplikater som telles separat.

Oppdaterer en liste i bash

Hvis du har en liste over elementer og du vil legge til eller slette elementer fra den, kan du bruke en indekserray for den, og her er et eksempel for demonstrasjon:

#!/bin/bash
elementer = ("mango" "ananas" "Strawberry" "Cherry" "druer")
# Legge til et nytt element i den indekserte matrisen til indeks 2
elementer [6] = "oransje"
# Slette elementet ved indeks 2 fra den indekserte matrisen
Usetelementer [2]
# Skrive ut den oppdaterte matrisen
ekko "$ elementer [@]"

I skriptet er en indeksert matrise “elementer” definert med fem innledende elementer. For å legge til et nytt element, blir verdien ganske enkelt tilordnet ønsket indeks ved å bruke syntaks -array [indeks] = verdi. I dette skriptet legges "oransje" til indeks 6 i matrisen. For å slette et element bruker vi UNSET -kommandoen etterfulgt av indeksen over elementet vi ønsker å fjerne. I dette tilfellet blir elementet ved indeks 2 (“Strawberry”) slettet. Den oppdaterte matrisen skrives deretter ut ved hjelp av syntaksen "$ array [@]", som utvider hele matrisen.

Konklusjon

De indekserte matriser er en praktisk struktur av bash som lar deg lagre og manipulere flere verdier ved hjelp av en enkelt variabel. Ved å forstå syntaks og bruk av indekserte matriser, kan du skrive mer effektive og effektive bashskript.