Použití proměnné $ IFS
Pro rozdělení řetězce na slova se v bashu používá speciální shell proměnná $ IFS. Proměnná $ IFS se nazývá Internal Field Separator (IFS), která se používá k přiřazení konkrétního oddělovače pro dělení řetězce. Hranice slov jsou v bash identifikovány pomocí $ IFS. Mezera je výchozí hodnotou oddělovače pro tuto proměnnou. Jako oddělovač lze použít jakoukoli jinou hodnotu, například „ t“, „ n“, „-“ atd. Po přiřazení hodnoty do proměnné $ IFS lze hodnotu řetězce přečíst ze dvou možností. Jsou to „-r“ a „-a“. Možnost „-r“ se používá ke čtení zpětného lomítka () jako znaku, nikoli jako únikový znak, a možnost „-a“ se používá k ukládání rozdělených slov do proměnné pole. Řetězec lze rozdělit bez použití proměnné $ IFS v bash. Různé způsoby rozdělení řetězcových dat (s $ IFS nebo bez $ IFS) jsou uvedeny v následujících příkladech.
Příklad-1: Rozdělení řetězce na základě
Hodnota řetězce je ve výchozím nastavení dělena mezerou. Vytvořte soubor s názvem ‘split1.sh’ a přidejte následující kód. Zde se k přiřazení řetězcové hodnoty používá $ textová proměnná. Proměnná prostředí $ IFS se používá k přiřazení znaku, který bude použit k rozdělení řetězcových dat. Prostor je v tomto skriptu použit jako oddělovač. Možnost -a se používá s příkazem pro čtení k uložení dat rozdělených do proměnné pole s názvem $ strarr. Smyčka „for“ se používá ke čtení každého prvku pole, $ strarr.
split1.sh
#!/bin/bash
#Definujte hodnotu řetězce
text='Welcome to LinuxHint'
# Nastavit prostor jako oddělovač
IFS=''
#Přečtěte rozdělená slova do pole na základě oddělovače mezer
číst -nastrarr<<< '$ text'
#Sečtěte celkový počet slov
vyhodil 'Existují$ {#strarr [*]}slova v textu. '
# Vytiskněte každou hodnotu pole pomocí smyčky
prohodv '$ {strarr [@]}';
dělat
printf '$ hodin n'
Hotovo
Výstup:
Spusťte skript.
$bashsplit1.sh
Po spuštění skriptu se zobrazí následující výstup.
Příklad-2: Rozdělení řetězce na základě konkrétního znaku
Jako oddělovač pro rozdělení hodnoty řetězce lze použít libovolný konkrétní znak. Vytvořte soubor s názvem split2.sh a přidejte následující kód. Zde se název knihy, jméno autora a hodnota ceny berou přidáním čárky (,) jako vstupního řetězce. Dále se hodnota řetězce rozdělí a uloží do pole na základě hodnoty proměnné prostředí $ IFS. Každá hodnota prvků pole je vytištěna hodnotou indexu.
split2.sh
#!/bin/bash#Přečtěte si hodnotu řetězce
vyhodil „Zadejte název knihy, jméno autora a cenu oddělením čárkou. '
čísttext
# Jako oddělovač nastavte čárku
IFS=','
#Přečtěte rozdělená slova do pole na základě oddělovače čárky
číst -nastrarr<<< '$ text'
#Vytiskněte rozdělená slova
vyhodil 'Název knihy:$ {strarr [0]}'
vyhodil 'Jméno autora:$ {strarr [1]}'
vyhodil 'Cena :$ {strarr [2]}'
Výstup:
Spusťte skript.
$bashsplit2.shPo spuštění skriptu se zobrazí následující výstup.
Příklad 3: Rozdělte řetězec bez proměnné $ IFS
Tento příklad ukazuje, jak lze hodnotu řetězce rozdělit bez použití $ IFS v bash. Vytvořte soubor s názvem „ split3.sh ‘ a přidejte následující kód. Podle skriptu textová hodnota s dvojtečkou (:) musí brát jako vstup pro rozdělení. Zde se k rozdělení řetězcových dat používá příkaz „readarray“ s volbou -d. Volba „-d“ se používá k definování oddělovače v příkazu, jako je $ IFS. Dále se k tisku prvků pole používá smyčka „for“.
split3.sh
#!/bin/bash#Přečtěte si hlavní řetězec
vyhodil 'Zadejte řetězec dvojtečkou (:) k rozdělení'
čístmainstr
#Rozdělte řetězec podle oddělovače ':'
readarray-d:-tstrarr<<< '$ mainstr'
printf ' n'
# Vytiskněte každou hodnotu pole pomocí smyčky
pro (( n=0; n< $ {#strarr [*]}; n ++))
dělat
vyhodil '$ {strarr [n]}'
Hotovo
Výstup:
Spusťte skript.
$bashsplit3.shPo spuštění skriptu se zobrazí následující výstup.
Příklad-4: Rozdělte řetězec víceznakovým oddělovačem
Hodnota řetězce je ve všech předchozích příkladech rozdělena oddělovačem jednoho znaku. V tomto příkladu je ukázáno, jak můžete řetězec rozdělit pomocí víceznakového oddělovače. Vytvořte soubor s názvem Časy split4.sh a přidejte následující kód. Zde se k ukládání řetězcových dat používá $ textová proměnná. $ delimiter variable is used to assign a multi-character data that is used as the delimiter in the next commands. Proměnná $ myarray se používá k ukládání jednotlivých dat rozdělených jako pole. Nakonec jsou všechna data s rozděleným datem vytištěna pomocí smyčky „for“.
split4.sh
#!/bin/bash#Definujte řetězec, který chcete rozdělit
text='learnHTMLlearnPHPlearnMySQLlearnJavascript'
#Definujte víceznakový oddělovač
oddělovač='Učit se'
#Spojte oddělovač s hlavním řetězcem
tětiva=$ text$ oddělovač
#Rozdělte text podle oddělovače
myarray=()
zatímco [[ $ řetězec ]];dělat
myarray+=( '$ {string %% '$ delimiter'*}' )
tětiva=$ {string#*'$ delimiter'}
Hotovo
#Vytiskněte slova po rozdělení
prohodnotav $ {myarray [@]}
dělat
vyhodil -n '$ hodnota'
Hotovo
printf ' n'
Výstup:
Spusťte skript.
$bashsplit4.shPo spuštění skriptu se zobrazí následující výstup.
Závěr:
Řetězcová data je třeba rozdělit pro různé účely programování. V tomto kurzu jsou ukázány různé způsoby rozdělení dat řetězců v bash. Doufám, že po procvičení výše uvedených příkladů budou čtenáři schopni rozdělit libovolná řetězcová data na základě jejich požadavku.
Pro více informací sledujte video !