Hvordan bruke $ IFS i bash?

Hvordan bruke $ IFS i bash?

IFS er en forkortelse for intern feltskillelse som er en miljøvariabel i skallet for å bestemme separatoren. $ IFS spesifiserer hvordan ordene på ledeteksten er avgrenset. Som standard er feltskiller (IFS) plassen, fanen og Newline, men vi kan endre dette i skriptet vårt for å matche kravene. Det brukes mest til løkker for å manipulere elementene i den spesifiserte listen. Vi bruker $ IFS-variabelen i bash-skriptet vårt for å dele opp strengen fordi bash ikke inkluderer en innebygd mekanisme for strengsplitting.

Eksempel 1: Bash -skript uten $ IFS -operatør

Tenk på følgende bash -skript der elementene er atskilt med det tomme rommet. Her bruker vi ikke $ IFS -operatøren for å se utdataene fra det normale bash -skriptet. Vi lager "bash.SH ”-filen og åpne den deretter for å skrive programmet for å skrive ut strengen på Bash Shell. Vi begynner med erklæringen om variabelen som har tittelen “$ MySentence” og spesifiserer denne variabelen med den lange strengen. Vi har forskjellige ord i strengen som er delt av plassen. Deretter kaller vi foreach -sløyfen for å skrive ut hvert ord i "$ mysentence" -strengen. Foreach -sløyfen er satt med “MyWords” -objektet som holder det itererte ordet fra strengen. Etter det gjenspeiler vi de itererte ordene fra strengen med Echo -kommandoen som er distribuert mellom DO og Done -uttalelsen.

#!/usr/bin/env bash
Mysentence = "Bash er en effektiv programmering"
for mywords i $ mySentence
gjøre
ekko "$ mywords"
Ferdig

Åpne terminalen med snarveisnøkkelen “Ctrl+Alt+T” og kompiler “Bash.sh ”-fil med bash -kommandoen. De viste ordene i skallet er i en egen linje fordi plassen, fanene og den nye linjen regnes som feltskiller i bash.

$ bash ./Bash.sh

Eksempel 2: Bash -skript med $ IFS -operatøren

Vi skiller ordene i den spesifiserte strengen uten å bruke $ IFS -operatøren. Vi kan bruke $ IFS -operatøren med ønsket karakter. Hvis vi endrer standard IFS, er det en klok strategi å lagre den gamle i en variabel. Når vi har fullført de nødvendige oppgavene, kan vi tilordne den opprinnelige karakteren til IFS. La oss ha bashskriptet der $ IFS -operatøren er ansatt for å skille ordene.

Her spesifiserer vi strengen som navnet på personer som er atskilt med karakteren Colon “:” Inne i "Persons" -variabelen. Deretter lagrer vi den originale IFS -verdien i "pre_ifs" -attributtet. Deretter erklærer vi IFS -variabelen der tykktarmen “:” er satt som en avgrenser. IFS -variabelen brukes som et ordtoken som brukes til for -loopen. Vi bruker foreach-sløyfen for å krysse strengen til "Persons" -variabelen i delt form og overføre alle strengelementene til "Per" -objektet til for-hver-sløyfen. Deretter bruker vi Echo -setningen innen DO og Done -kommandoene for å vise de separate strengene.

#/bin/bash
Personer = Alex: Thomas: Kyle: Jenny
Pre_ifs = "$ ifs"
Ifs = ":"
for per i $ personer
gjøre
ekko navnet på personer er $ per
Ferdig

Sett den sammen med bash -skriptfilen i terminalen for å se utdataene fra å bruke IFS -operatøren. Når bash -filen til IFS -operatøren utføres, skiller den hver streng i følgende format:

Eksempel 3: Bash -skript med $ IFS -operatøren for å vise brukernavnet fra filen

Nå bruker vi $ IFS -operatøren i Bash -skriptet for å vise navnet på brukerne fra "/etc/passwd" -filen. Vi bruker $ IFS -operatøren her som skiller hvert brukernavn i skallet. Følgende bash -skript begynner med erklæringen om "IFS" -variabelen som er satt med "$" \ n "" -karakteren og en tykktarm ":". $ '\ N' -karakteren er et nytt linjekarakter som brukes til rømningssekvensen. Brukernavnene er atskilt via gitt IFS.

Etter dette har vi en variabel “x” hvis verdi er tildelt som “1”. Deretter bruker vi en CAT -kommando med "/etc/passwd" -filen som overfører brukernavnet til "bruker" -objektet til foreach -sløyfen for å iterere over alle brukerne av "/etc/passwd" -filen. Kommandoene "Do" og "Done" er spesifisert med de nestede "hvis" betingede uttalelser for å gjenspeile brukerne.

Ifs = $ '\ n':
x = 1
for bruker i 'Cat /etc /passwd'
gjøre
hvis [$ x -eq 1]
deretter
Echo $ bruker
fi
hvis [$ x -eq 7]
deretter
x = 1
ellers
x = $ ((x+1))
fi
Ferdig

Vi utfører bashskriptet på følgende terminalskjerm som sender ut brukerne av "/etc/passwd" med en spesifisert feltskillelse:

Eksempel 4: Kommandolinje Bash-skript med $ IFS

IFS er en spesifikk skallvariabel slik at vi kan bruke den direkte i kommandolinjen. Her har vi en snarvei til å bruke IFS -operatøren. I stedet for å lage en egen bash -skriptfil, åpner vi terminalen og definerer "IFS" -variabelen. "IFS" -variabelen er satt med bindestrek "-" avgrenseren. Deretter gjenspeiler vi en "Hello-Geeks" -streng som er atskilt med en feltskillelse bindestrek "-". Deretter bruker vi lesekommandoen for å definere variablene “var1” og “var2” og ekko disse variablene hver for seg.

Ifs = "-"
ekko "Hello-Geeks!"| (les var1 var2; ekko $ var1; ekko $ var2)

Utgangen henter Hello -strengen og "nørder" -strengen hver for seg. Derfor aksepterer $ IFS avgrenserne individuelt.

Eksempel 5: Deling av den brukerdefinerte strengen i bash-skriptet med IFS

Vi benyttet $ IFS -operatøren i forrige bash -skript for å demonstrere funksjonaliteten. Nå bruker vi en IFS -operatør for å angi separatoren for strengen med ord som er definert av brukeren i terminalen. Vi gir en lest kommando med "-p" -flagget. Denne kommandoen skriver ut "skriv inn strengen med rom" -uttalelsen. Deretter initialiseres den angitte strengen i "Stringis" -variabelen. IFS -operatøren er satt med romavgrenser for å dele strengene.

Deretter har vi “Read -Ra Addr” -kommandoen som leser “$ Strinis” som en rekke symboler som er delt av IFS. Alternativet “-r” spesifiserer at backslash “\” ikke er en rømningskarakter, det er et tegn. Alternativet “-a” spesifiserer at ordene er atskilt med $ IFS som er tildelt Array's Sequential Index som starter på null. Etter det får vi tilgang til strengelementene i matrisen ved å krysse den gjennom foreach -sløyfen.

#!/bin/bash
Les -P "Gå inn i strengen med plass:" Stringis
Ifs = "
Les -ra addr <<<"$StringIS"
for jeg i "$ addr [@]";
gjøre
ekko "$ i"
Ferdig

Strengen som er lagt inn av brukeren inneholder de tomme rommene hvis utførelse er oppnådd som følger:

Konklusjon

Denne redaksjonen oppdaget metoden for å skille et symbol i bash gjennom $ IFS ved å implementere bash -skriptene. Vi brukte også $ IFS i ledeteksten for å dele strengen. Dette er en veldig enkel og kort måte å oppnå separasjonen av strengen. Skallet bruker skall.