Manipulace s řetězci je jedním ze základních konceptů ve skriptování bash. V programování jsou řetězce jedním z datových typů, které jsou uspořádanou posloupností znaků. Je důležité, abyste věděli, jak vytvářet a manipulovat s řetězci v bash. V této příručce se na jednoduchých příkladech naučíme manipulaci s řetězci ve skriptování shellu Bash. Na konci tohoto článku se vám bude pohodlně pracovat s bash strunami.
Přiřazení proměnných
Řetězce mohou být přiřazeny k proměnné a později použity ve skriptu pro další zpracování. Například vytvářím proměnnou s názvem "GREET_USER" a vytištění řetězce na terminál.
$ GREET_USER="Hello, Thanks for visiting OSTechnix"
$ echo "$GREET_USER"
Bash nemá žádný silný typový systém, takže pokud proměnné přiřadíte hodnotu, bude s ní zacházeno jako s řetězcovým typem. Můžete vytvářet řetězce s jednoduchými, dvojitými nebo žádnými uvozovkami.
V bash je rozdíl mezi jednoduchými a dvojitými uvozovkami. Jednoduché uvozovky zabraňují rozšiřování proměnných a příkazů, zatímco dvojité uvozovky to podporují. Podívejte se na níže uvedený příklad.
Vytvořil jsem další proměnnou s názvem "SITE_NAME" a používá se v "GREET_USER" variabilní. Ve dvojitých uvozovkách bude proměnná rozšířena a v jednoduchých uvozovkách proměnná nebude rozšířena.
$ SITE_NAME="OSTechnix"
## DOUBLE QUOTES
$ GREET_USER="Hello, Thanks for visiting ${SITE_NAME}"
$ echo "$GREET_USER"
# SINGLE QUOTES
$ GREET_USER='Hello, Thanks for visiting ${SITE_NAME}'
$ echo "$GREET_USER"
Délka řetězce
Chcete-li zjistit délku řetězce, můžete použít # symbol. Zjištění délky řetězce bude užitečné v některých případech, kdy musíte napsat nějakou logiku založenou na počtu řetězců.
$ echo "${#SITE_NAME}"
Převod řetězců na pole
Existuje mnoho způsobů, jak převést datový typ řetězce na typ pole. Nejjednodušším způsobem by bylo uzavřít řetězec do složených závorek.
$ ARR_TYPE=($GREET_USER)
$ echo ${ARR_TYPE[@]}
$ for element in ${ARR_TYPE[@]}; do
echo $element
done
Druhou metodou by bylo rozdělit řetězec a uložit jej jako pole na základě oddělovače použitého v řetězci. V předchozím příkladu se jako oddělovač polí (IFS) používá mezera, což je výchozí IFS v bash. Pokud máte například řetězec oddělený čárkami, můžete nastavit IFS na čárku a vytvořit pole. Další podrobnosti o IFS naleznete v následující příručce:
- Bash Scripting – smyčka Zatímco a dokud není vysvětlena příklady
$ STR_TO_ARR="column1,column2,column3"
$ IFS=","
$ ARR=(${STR_TO_ARR})
$ for element in ${ARR[@]}; do echo $element; done
$ echo "${ARR[@]}"
Konverze případu
Bash má vestavěnou podporu pro konverzi případu řetězce. Pro převod velkých a malých písmen, jak je znázorněno níže, musíte na konci řetězce použít některé speciální znaky.
# SPECIAL CHARACTERS ,, ==> Converts an entire string to lowercase ^^ ==> Converts an entire string to Uppercase ~~ ==> Transpose Case , ==> Converts first letter alone to lowercase ^ ==> Converts first letter alone to uppercase
# ---- LOWER TO UPPER CASE ----
$ L_TO_U="welcome to ostechnix"
$ echo ${L_TO_U^^}
# ---- UPPER TO LOWER CASE ----
$ U_TO_L="WELCOME TO OSTECHNIX"
$ echo ${L_TO_U,,}
# ---- TRANSPOSE CASE ----
$ TRS_CASE="Welcome To OsTechnix"
$ echo ${TRS_CASE~~}
# ---- FIRST LETTER TO LOWERCASE ----
$ F_TO_L="OSTECHNIX"
$ echo ${F_TO_L,}
# ---- FIRST LETTER TO UPPERCASE ----
$ F_TO_U="ostechnix"
$ echo ${F_TO_U^}
Můžete také použít porovnávání vzorů regulárních výrazů a převést velká a malá písmena u shod.
$ L_TO_U="welcome to ostechnix"
$ echo ${L_TO_U^^[toe]}
Zřetězení řetězců
Můžete zřetězit více řetězců umístěním řetězců jeden za druhým. V závislosti na tom, jak jsou vaše řetězce zřetězeny, můžete přidat i další znaky.
$ SITE_NAME="OSTechnix"
$ MESSAGE="Welcome to"
$ echo "${MESSAGE} {SITE_NAME}"
Řezání řetězce
Řetězec je způsob, jak extrahovat část řetězce pomocí pozice indexu. Každému znaku v řetězci je přiřazena celočíselná hodnota, kterou lze použít k zachycení části řetězce. Hodnota indexu se pohybuje od 0 do N. Níže je uvedena syntaxe pro dělení.
{STRING:START:LENGTH}
START => Starting Index Position
LENGTH => Length of the String from position START
Pokud LENGTH není zadán, bude řetězec vytištěn až do konce od pozice indexu START .
$ SITE_NAME="OSTechnix"
$ echo ${SITE_NAME:2}
S délkou LENGTH vytiskne podřetězec od pozice START indexu a kolik znaků se má vytisknout.
$ echo ${SITE_NAME:2:2}
Řetězec můžete také mnoha způsoby obrátit. Nejjednodušší způsob je použít příkaz rev. Pokud to chcete udělat bash způsobem bez použití jakéhokoli externího příkazu, musíte logiku napsat ručně.
$ echo ${SITE_NAME} | rev
Vyhledat a nahradit
Existuje nativní způsob, jak vyhledávat a nahrazovat znaky v řetězci bez použití jakéhokoli externího příkazu, jako je sed nebo awk .
Chcete-li nahradit první výskyt podřetězce, použijte následující syntaxi.
{STRING/X/Y}
The first occurrence of X will be replaced by Y.
Podívejte se na níže uvedený příklad, kde je první výskyt slova "linux" je nahrazeno LINUX velkými písmeny.
$ MESSAGE="linux is awesome to work with.
Ubuntu is one of the powerful linux distribution"
$ echo $MESSAGE
$ echo ${MESSAGE/linux/LINUX}
Chcete-li nahradit všechny výskyty slova, použijte následující syntaxi.
$ echo ${MESSAGE//linux/LINUX}
Odstranit podřetězec
Existují různé způsoby, jak odstranit podřetězec z řetězce. Externí nástroje jako sed , awk nebo tr lze použít nebo existuje způsob, jak to udělat nativním způsobem bash.
Nativním způsobem bash se k odstranění podřetězce používá expanze parametrů. Musíte použít % symbol následovaný vzorem k odstranění. Tím se bude shodovat s posledním nalezeným vzorem a odstraní se.
Například chci odstranit slova, která následují za tečkou (. ) by měla být použita následující syntaxe. Zde vše, co následuje po období (. ) budou odstraněny. V tomto případě poslední odpovídající vzor .com je odstraněn.
$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME%.*}
Chcete-li odpovídat prvnímu výskytu vzoru, použijte dvojité procento symbol
$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME%%.*}
Můžete také použít # nebo ## symbol, který provede druh inverzního mazání. S jediným # symbol, první vzor je spárován a vše před vzorem je smazáno.
$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME#*.}
S dvojitým ## symbol, poslední vzor je spárován a vše před vzorem je smazáno.
$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME##*.}
Závěr
V tomto článku jsme viděli, jak vytvořit struny v bash a různé způsoby, jak se strunami manipulovat. Chcete-li se seznámit s manipulací s bash řetězci, spusťte terminál a začněte procvičovat příklady uvedené v této příručce. Pokud máte nějakou zpětnou vazbu nebo dotaz, použijte prosím sekci komentářů níže.
Příručky skriptování Bash:
- Skriptování Bash – příkaz Printf s příklady
- Skriptování Bash – indexované pole s příklady
- Bash Scripting – Asociativní pole vysvětleno s příklady
- Bash Scripting – pro smyčku vysvětlenou na příkladech
- Přesměrování Bash vysvětleno na příkladech
- Bash Scripting – proměnné vysvětlené na příkladech
- Bash Scripting – funkce vysvětlené na příkladech
- Příkaz Bash Echo vysvětlený s příklady v Linuxu
- Výukový program Bash Heredoc pro začátečníky