Použitie premennej $ IFS
Na rozdelenie reťazca na slová sa v bash používa špeciálna premenná shell $ IFS. Premenná $ IFS sa nazýva interný oddeľovač polí (IFS), ktorý sa používa na priradenie konkrétneho oddeľovača na rozdelenie reťazca. Hranice slova sú v bashe identifikované pomocou $ IFS. Prázdny priestor je predvolenou hodnotou oddeľovača pre túto premennú. Ako oddeľovač je možné použiť akékoľvek iné hodnoty, napríklad „ t“, „ n“, „-“ atď. Po priradení hodnoty do premennej $ IFS je možné hodnotu reťazca prečítať pomocou dvoch možností. Sú to „-r“ a „-a“. Voľba „-r“ sa používa na čítanie spätného lomítka () ako znaku a nie na únikový znak a možnosť „-a“ sa používa na ukladanie rozdelených slov do premennej poľa. Reťazec je možné rozdeliť bez použitia premennej $ IFS v bash. Rôzne spôsoby rozdelenia reťazcových údajov (s $ IFS alebo bez $ IFS) sú uvedené v nasledujúcich príkladoch.
Príklad 1: Rozdelenie reťazca na základe
Štandardne je hodnota reťazca delená prázdnymi miestami. Vytvorte súbor s názvom „split1.sh“ a pridajte nasledujúci kód. Tu sa na priradenie reťazcovej hodnoty používa premenná $ text. Premenná shell, $ IFS, sa používa na priradenie znaku, ktorý sa použije na rozdelenie reťazcových údajov. V tomto skripte sa ako oddeľovač používa medzera. Voľba „-a“ sa používa s príkazom na čítanie na uloženie rozdelených údajov do premennej poľa s názvom $ strarr. Slučka „for“ sa používa na čítanie každého prvku poľa, $ strarr.
split1.sh
#!/bin/bash
#Definujte hodnotu reťazca
text=„Vitajte v LinuxHint“
# Nastaviť priestor ako oddeľovač
IFS=''
#Prečítajte rozdelené slová do poľa na základe oddeľovača medzier
čítať -dostrarr<<< '$ text'
#Sčítajte všetky slová
zahodil 'Existujú$ {#strarr [*]}slová v texte. “
# Vytlačte každú hodnotu poľa pomocou slučky
prehodv '$ {strarr [@]}';
urobiť
printf '$ hodín n'
hotový
Výkon:
Spustite skript.
$bashsplit1.sh
Po spustení skriptu sa zobrazí nasledujúci výstup.
Príklad 2: Rozdelenie reťazca na základe konkrétneho znaku
Na oddelenie hodnoty reťazca je možné ako oddeľovač použiť ľubovoľný konkrétny znak. Vytvorte súbor s názvom split2.sh a pridajte nasledujúci kód. Tu sa názov knihy, meno autora a hodnota ceny berú ako čiarka (,) ako vstupný reťazec. Ďalej sa hodnota reťazca rozdelí a uloží do poľa na základe hodnoty premennej shellu $ IFS. Každá hodnota prvkov poľa je vytlačená hodnotou indexu.
split2.sh
#!/bin/bash#Prečítajte si hodnotu reťazca
zahodil „Zadajte názov knihy, meno autora a cenu oddelením čiarkami. '
čítaťtext
# Nastaviť čiarku ako oddeľovač
IFS=','
#Prečítajte rozdelené slová do poľa na základe oddeľovača čiarok
čítať -dostrarr<<< '$ text'
#Vytlačte rozdelené slová
zahodil „Názov knihy:$ {strarr [0]}'
zahodil 'Meno autora:$ {strarr [1]}'
zahodil 'Cena :$ {strarr [2]}'
Výkon:
Spustite skript.
$bashsplit2.shPo spustení skriptu sa zobrazí nasledujúci výstup.
Príklad 3: Rozdeľte reťazec bez premennej $ IFS
Tento príklad ukazuje, ako je možné hodnotu reťazca rozdeliť bez použitia $ IFS v bash. Vytvorte súbor s názvom „ split3.sh ' a pridajte nasledujúci kód. Podľa scenára textová hodnota s dvojbodkou (:) musí brať ako vstup pre rozdelenie. Tu sa na rozdelenie reťazcových údajov používa príkaz „readarray“ s voľbou -d. Voľba „-d“ sa používa na definovanie oddeľovača v príkaze, ako je $ IFS. Ďalej sa slučka „for“ používa na tlač prvkov poľa.
split3.sh
#!/bin/bash#Prečítajte si hlavný reťazec
zahodil „Zadajte reťazec s dvojbodkou (:) na rozdelenie“
čítaťmainstr
#Rozdeľte reťazec podľa oddeľovača ':'
readarray-d:-tstrarr<<< '$ mainstr'
printf ' n'
# Vytlačte každú hodnotu poľa pomocou slučky
pre (( n=0; n< $ {#strarr [*]}; n ++))
urobiť
zahodil '$ {strarr [n]}'
hotový
Výkon:
Spustite skript.
$bashsplit3.shPo spustení skriptu sa zobrazí nasledujúci výstup.
Príklad 4: Rozdeľte reťazec viacznakovým oddeľovačom
Vo všetkých predchádzajúcich príkladoch je hodnota reťazca rozdelená na jeden oddeľovač znakov. V tomto príklade je znázornené, ako môžete rozdeliť reťazec pomocou oddeľovača viacerých znakov. Vytvorte súbor s názvom Časy rozdelené4.sh a pridajte nasledujúci kód. Tu sa na ukladanie údajov reťazca používa premenná $ text. Premenná $ delimiter sa používa na priradenie viacznakových údajov, ktoré sa v nasledujúcich príkazoch používajú ako oddeľovač. Premenná $ myarray sa používa na ukladanie všetkých údajov s rozdeleným časom ako prvok poľa. Nakoniec sa všetky rozdelené údaje vytlačia pomocou slučky „for“.
split4.sh
#!/bin/bash#Definujte reťazec, ktorý chcete rozdeliť
text='learnHTMLlearnPHPlearnMySQLlearnJavascript'
#Define multi-character delimiter
oddeľovač='učiť sa'
#Spojte oddeľovač s hlavným reťazcom
reťazec=$ textoddeľovač dolárov
#Rozdeľte text na základe oddeľovača
myarray=()
kým [[ $ reťazec ]];urobiť
myarray+=( '$ {string %% '$ delimiter'*}' )
reťazec=$ {string#*'$ delimiter'}
hotový
#Vytlačte slová po rozdelení
prehodnotuv $ {myarray [@]}
urobiť
zahodil -n 'hodnota $'
hotový
printf ' n'
Výkon:
Spustite skript.
$bashsplit4.shPo spustení skriptu sa zobrazí nasledujúci výstup.
Záver:
Reťazcové údaje je potrebné rozdeliť na rôzne účely programovania. V tomto návode sú uvedené rôzne spôsoby rozdelenia údajov reťazca v bash. Dúfam, že po precvičení vyššie uvedených príkladov budú čitatelia schopní rozdeliť všetky reťazcové údaje na základe ich požiadaviek.
Pre viac informácií sledujte video !