Pojďme manipulovat s některými řetězci!
Pokud jste obeznámeni s proměnnými v bash, již víte, že neexistují žádné samostatné datové typy pro string, int atd. Všechno je proměnná.
To však neznamená, že nemáte funkce pro manipulaci s řetězci.
V předchozí kapitole jste se naučili aritmetické operátory v Bash. V této kapitole se naučíte, jak manipulovat s řetězci pomocí různých operací s řetězci. Dozvíte se, jak získat délku řetězce, zřetězit řetězce, extrahovat podřetězce, nahradit podřetězce a mnoho dalšího!
Získat délku řetězce
Začněme získáním délky řetězce v bash.
Řetězec není nic jiného než sekvence (pole) znaků. Vytvořme řetězec s názvem distro a inicializujte jeho hodnotu na „Ubuntu “.
distro="Ubuntu"
Nyní, abyste získali délku řetězce distribuce, stačí přidat #
před názvem proměnné. Můžete použít následující příkaz echo:
[email protected]:~/scripts$ echo ${#distro}
6
Pamatujte, že příkaz echo slouží k vytištění hodnoty. {#string}
je to, co udává délku řetězce.
Zřetězení dvou řetězců
Řetězec můžete připojit na konec jiného řetězce; tento proces se nazývá řetězení řetězců.
Pro demonstraci nejprve vytvořte dva řetězce str1 astr2 takto:
str1="hand"
str2="book"
Nyní můžete oba řetězce spojit a výsledek přiřadit novému řetězci s názvem str3 takto:
str3=$str1$str2
Jednodušší to už být nemůže, že?
Hledání podřetězců
Můžete najít pozici (index) konkrétního písmena nebo slova v řetězci. Pro demonstraci nejprve vytvořte řetězec s názvem str takto:
str="Bash is Cool"
Nyní můžete získat konkrétní pozici (index) podřetězce v pohodě. K tomu použijte expr
příkaz:
[email protected]:~/scripts$ word="Cool"
[email protected]:~/scripts$ expr index "$str" "$word"
9
Výsledkem 9 je index, kde slovo „Cool“ začíná v str řetězec.
Záměrně se vyhýbám používání podmíněných příkazů, jako je if, jinak, protože v této sérii bash pro začátečníky budou podmíněné příkazy popsány později.
Extrahování podřetězců
Můžete také extrahovat podřetězce z řetězce; to znamená, že z řetězce můžete extrahovat písmeno, slovo nebo několik slov.
Pro demonstraci nejprve vytvořte řetězec s názvem foss takto:
foss="Fedora is a free operating system"
Nyní řekněme, že chcete extrahovat první slovo „Fedora“ v foss tětiva. Musíte zadat počáteční pozici (index) požadovaného podřetězce a počet znaků, které potřebujete extrahovat.
Proto pro extrakci podřetězce „Fedora“ použijete jako výchozí pozici 0 a z výchozí pozice vyjmete 6 znaků:
[email protected]:~/scripts$ echo ${foss:0:6}
Fedora
Všimněte si, že první pozice v řetězci je nula, stejně jako v případě polí v bash. Můžete také zadat pouze počáteční pozici podřetězce a vynechat počet znaků. V tomto případě bude extrahováno vše od počáteční pozice do konce řetězce.
Chcete-li například extrahovat podřetězec „volný operační systém“ z foss tětiva; potřebujeme pouze určit počáteční pozici 12:
[email protected]:~/scripts$ echo ${foss:12}
free operating system
Nahrazení podřetězců
Můžete také nahradit podřetězec jiným podřetězcem; například můžete nahradit „Fedora“ za „Ubuntu“ v foss řetězec takto:
[email protected]:~/scripts$ echo ${foss/Fedora/Ubuntu}
Ubuntu is a free operating system
Udělejme další příklad, nahradíme podřetězec „zdarma“ za „populární“:
[email protected]:~/scripts$ echo ${foss/free/popular}
Fedora is a popular operating system
Protože právě tisknete hodnotu pomocí příkazu echo, původní řetězec se skutečně nezmění.
Mazání podřetězců
Můžete také odstranit podřetězce. Pro demonstraci nejprve vytvořte řetězec s názvem fact takto:
fact="Sun is a big star"
Nyní můžete odstranit podřetězec „velký“ z faktu řetězce:
[email protected]:~/scripts$ echo ${fact/big}
Sun is a star
Vytvořme další řetězec s názvem cell:
cell="112-358-1321"
Nyní řekněme, že chcete odstranit všechny pomlčky z buňky tětiva; následující příkaz odstraní pouze první výskyt pomlčky v buňce řetězec:
[email protected]:~/scripts$ echo ${cell/-}
112358-1321
Chcete-li odstranit všechny výskyty pomlček z buňky řetězec, musíte použít dvojitá lomítka následovně:
[email protected]:~/scripts$ echo ${cell//-}
1123581321
Všimněte si, že používáte příkazy echo, takže řetězec buňky je neporušený a nezměněný; právě zobrazujete požadovaný výsledek!
Chcete-li řetězec upravit, musíte výsledek přiřadit zpět k řetězci následovně:
[email protected]:~/scripts$ echo $cell
112-358-1321
[email protected]:~/scripts$ cell=${cell//-}
[email protected]:~/scripts$ echo $cell
1123581321
Převod velkých a malých písmen v řetězci
Řetězec můžete také převést na malá nebo velká písmena. Nejprve vytvořte dva řetězce s názvem legend a herec:
legend="john nash"
actor="JULIA ROBERTS"
Všechna písmena v legendě můžete převést řetězec na velká písmena:
[email protected]:~/scripts$ echo ${legend^^}
JOHN NASH
Můžete také převést všechna písmena v řetězci aktérů na malá písmena:
[email protected]:~/scripts$ echo ${actor,,}
julia roberts
Můžete také převést pouze první znak legendy řetězec na velká písmena takto:
[email protected]:~/scripts$ echo ${legend^}
John nash
Podobně můžete převést pouze první znak herce řetězec na malá písmena takto:
[email protected]:~/scripts$ echo ${actor,}
jULIA ROBERTS
Můžete také změnit určité znaky v řetězci na velká nebo malá písmena; můžete například změnit písmena j
a n
na velká písmena v legendě řetězec takto:
[email protected]:~/scripts$ echo ${legend^^[jn]}
JohN Nash
Úžasný! Tím se dostáváme na konec tohoto tutoriálu v sérii bash pro začátečníky. Stáhněte si níže uvedený soubor PDF a procvičte si, co jste se právě naučili.
Bash Kapitola 6 Cvičné otázkyProblémy a jejich řešení k procvičení toho, co jste se právě naučili v této kapitole Bash-Kapitola-6-Procvičení-otázek-Linux-Příručka.pdf28 KB
Doufám, že se vám manipulace s řetězci v bash líbila a podívejte se na další kapitolu, kde se naučíte, jak přidat rozhodovací schopnosti do vašich bash skriptů!