Hvordan lage en bash -funksjon som returnerer en matrise

Hvordan lage en bash -funksjon som returnerer en matrise
Det kan først se ut til å skimte at det ikke er realistisk å returnere en matrise fra en bash -funksjon. Med tanke på alle fordelene, kan det være nyttig å ringe flere metoder for å konstruere matriser for å dele opp prosessen med å samle alle passende parametere for en YAD -samtale.

Det er mange grunner til at man kanskje vil gjenopprette en bash -gruppe:

  • Å administrere levetiden til matriser er enklere fordi de blir tildelt lokalt.
  • For oppnåelse av rett tid kan innhenting av matriser fra metoder hjelpe.
  • For å støtte loggalgoritmeteknikker kan navnene på metoder som returnerer matriser, støpes av.

Du kan tro at Bash mister muligheten til å returnere funksjonsarrays. Det er imidlertid ikke helt riktig. Det er mulig å flytte den resulterende matrisen til en metode som referanse, og tar signaler fra C/C ++ utviklere. En slik strategi lar metoden fortsette å være fri for referanser til en global variabel. Følgende artikkel viser klare forekomster av denne saken.

Eksempel 1: Returnerer en matrise

Logg inn i Linux -systemet ditt og åpne kommandeterminalen for å fortsette. Vi lager en bash -fil som heter “Script.sh ”ved hjelp av ta på kommando for å returnere matrisen ved hjelp av bash -funksjonen. Manuset er som følger:

$ berøringsskript.sh

Du kan se den nyopprettede filen i Hjem katalog. Åpne denne filen og skriv ned den vedlagte koden i den som den er. Her prøver vi å lage et assosiativt utvalg gjennom et argument i en metode fra enten et listekort.

Til å begynne med har vi opprettet funksjonen foo ().

Inne i dette programmet har vi fjernet "deklarering" -begrepet, som er en base-forhåndskonfigurert kommando som lar oss endre eller tilpasse attributtene, metodene til skallet smurt til variablene, og demonstrere verdiene til disse attributtene inne i de Spenn av vår skallkommandoterminal. Dessuten kan den brukes til å definere en langvarig. Til slutt brukes den til å definere variablene.

Vi har lagt til "fooval" -verdien til "arr" -arrayen.

Nøkkelordet “-a” brukes til å lage Navn Assosiativt utvalg hvis støttes. Vi må bruke listen/matrisen som en global variabel, noe som innebærer at bare en metode, ikke et skript, kan utføre denne handlingen.

Vi har også laget en annen rekke, kalt "Myarr", for bruk som referanse. Bash lar navnet på en relativ variabel ARR være ulik navnet på den relative variabelen MyArr.

Etter det, på åttende linje, har vi passert “Myarr” -arrayen til bash foo () funksjon som referanse.

I det siste brukte vi “For” -løkken for å trykke både “ARR” og “Myarr” -arrayene til foo () funksjon.

Vi vil nå sjekke resultatet av denne koden. Utfør Bash -kommandoen for å kjøre ovennevnte kode. Du kan se at matrisen er returnert til funksjonen og deretter skrevet ut.

$ bash -manus.sh

Eksempel 2: Returnerer en annen rekke

La oss se på et annet eksempel på returnerende matriser til en funksjon. Åpne kommandoteterminalen og opprett en ny fil som heter “OpenVPN.logg ”ved hjelp av ta på Kommando, som følger:

$ Touch OpenVPN.Logg

Nå, åpne “OpenVPN.Logg "-filen, og skriv følgende tekst i denne filen, som vist. Lagre denne filen og lukk den.

Igjen, åpne kommandoskallet og lag en annen fil som heter “skript.sh, ”ved hjelp av ta på Kommando for å legge til bashskriptet i filen.

$ berøringsskript.sh

Deretter åpner du “Skriptet.sh ”-filen og legg til følgende kode i denne filen som-er. Lagre og lukk denne filen. Dette skriptet vil bruke en metode som leser verdier/strenger fra et dokument og returnerer en matrise:

  • Deklarerer matrisen: Klienter
  • Tildel den returnerte utvalget av metoden for å array -klienter
  • Vis matrise: klienter

La oss nå se detaljert på arbeidet med dette skriptet.

  • Vi har erklært et globalt utvalg av "klienter" ved hjelp av "erklære" nøkkelord, etterfulgt av "-a.”
  • ReadArray () Funksjonen er definert. I denne funksjonen har vi erklært noen lokale variabler. Den lokale variabelen "matrisen" er tom, men "jeg" og "j" er blitt definert med 0 -verdien som skal brukes som iteratorer.
  • Ved hjelp av lesemodus vil vi lese teksten fra filen ved hjelp av iteratorer for å øke indeksene.
  • Linjen “klienter [$ ((i ++))]+= $ line;” brukes til å legge tekstlinjene til den globalt definerte "klienter" array -variabelen.
  • Etter det hopper “J ++” på neste indeks.
  • Variabelen “$ 1” brukes til å lagre og returnere matrisen som nettopp ble opprettet fra “OpenVPN.Logg ”tekstfil.
  • På utsiden av funksjonen er strengen blitt erklært som "$ streng" og har fått en filsti som en verdi.
  • Denne strengen er blitt sendt til ReadArray funksjon som en referanse for å lese tekst fra denne filen.
  • Etter det er "klienter" -arrayen blitt skrevet ut, og hele teksten i den har blitt vist på en linje.
  • Nå vil vi vise en melding om at matrisen ikke lenger er tom.
  • "For" -sløyfen har blitt brukt til å konvertere innholdet i "klienter" -arrayen til array -typen og erklære en indeks for innholdet ved å bruke uttalelsen "Echo" $ i: $ klienter [$ i].”
  • Til slutt viste vi en melding og skrev ut noen konverterte matriseverdier separat som en enkelt indeksert plassering av en matrise.

La oss nå sjekke utgangen fra dette bashskriptet. Kjør Bash -kommandoen for å utføre “skriptet.sh ”-fil. Som du kan se, vil den første ekko -setningen skrive ut all teksten fra “OpenVPN.logg "-filen, som er lagret i" klienter "-arrayen som en linje. Den andre ekko -setningen vil vise strengmeldingen. Den tredje ekko -uttalelsen vil vise "klienter" -arrayen i indeksert form, ettersom den nettopp er konvertert. Den fjerde vil vise en melding igjen. Den siste vil vise innholdet i "klienter" -arrayen individuelt.

Konklusjon

Denne artikkelen viste deg hvordan du returnerer matriser (spesielt assosiative matriser) til en funksjon ved å bruke den "erklære" innebygde kommandoen med to eksempler. Jeg håper at denne artikkelen hjalp deg til å forstå dette emnet bedre.