Bash 基礎(chǔ)知識系列 #6:處理字符串操作
在大多數(shù)編程語言中,你都會找到字符串?dāng)?shù)據(jù)類型。字符串基本上是一組字符。
但 Bash Shell 有所不同。字符串沒有單獨的數(shù)據(jù)類型。這里一切都是變量。
但這并不意味著你不能像在 C 和其他編程語言中那樣處理字符串。
在 Bash Shell 中可以查找子字符串、替換子字符串、連接字符串以及更多字符串操作。
在 Bash 基礎(chǔ)知識系列的這一部分中,你將學(xué)習(xí)基本的字符串操作。
在 Bash 中獲取字符串長度
讓我們從最簡單的選項開始。也就是獲取字符串的長度。這很簡單:
${#string}
讓我們在示例中使用它。
Example of getting string length in bash
正如你所看到的,第二個示例中有兩個單詞,但由于它用引號引起來,因此它被視為單個單詞。連空格都算作一個字符。
在 Bash 中連接字符串
用技術(shù)術(shù)語來說是字符串 連接concatenation,這是 Bash 中最簡單的字符串操作之一。
你只需像這樣一個接一個地使用字符串變量:
str3=$str1$str2
還能比這更簡單嗎?我覺得不能。
讓我們看一個例子。這是我的示例腳本,名為 join.sh
:
#!/bin/bash
read -p "Enter first string: " str1
read -p "Enter second string: " str2
joined=$str1$str2
echo "The joined string is: $joined"
以下是該腳本的運行示例:
Join two strings in bash
在 Bash 中提取子字符串
假設(shè)你有一個包含多個字符的大字符串,并且你想要提取其中的一部分。
要提取子字符串,需要指定主字符串、子字符串的起始位置和子字符串的長度,如下所示:
${string:$pos:$len}
?? 和數(shù)組一樣,字符串中的定位也是從 0 開始。
這是一個例子:
Extracting substring in bash
即使你指定的子字符串長度大于字符串長度,它也只會到達字符串末尾。
替換 Bash 中的子字符串
假設(shè)你有一個大字符串,并且你想用另一個字符串替換其中的一部分。
在這種情況下,你可以使用這種語法:
${string/substr1/substr2}
? 只有第一次出現(xiàn)的子字符串才會以這種方式替換。如果要替換所有出現(xiàn)的地方,請使用
${string//substr1/substr2}
這是一個例子:
Replace substring in bash
正如你在上面看到的,“good” 一詞被替換為 “best”。我將替換的字符串保存到同一字符串中以更改原始字符串。
?? 如果未找到子字符串,則不會替換任何內(nèi)容。它不會導(dǎo)致錯誤。
在 Bash 中刪除子字符串
我們來談?wù)剟h除子字符串。假設(shè)你要刪除字符串的一部分。在這種情況下,只需將子字符串提供給主字符串,如下所示:
${string/substring}
? 通過這種方式,僅刪除第一次出現(xiàn)的子字符串。如果要刪除所有出現(xiàn)的內(nèi)容,請使用
${string//substr}
如果找到子字符串,則將從字符串中刪除它。
讓我們通過一個例子來看看。
Delete substring in bash
不用說,如果沒有找到子字符串,則不會刪除它。它不會導(dǎo)致錯誤。
??? 練習(xí)時間
現(xiàn)在是你通過簡單練習(xí)來實踐字符串操作的時候了。
練習(xí) 1:聲明一個字符串 “I am all wet”。現(xiàn)在通過用 “set” 替換單詞 “wet” 來更改此字符串。
練習(xí) 2:創(chuàng)建一個字符串,以 112-123-1234
格式保存電話號碼?,F(xiàn)在,你必須刪除所有 -
。
這應(yīng)該會給你一些在 Bash 中使用字符串的不錯的練習(xí)。在下一章中,你將學(xué)習(xí)如何在 Bash 中使用 if-else
語句。敬請關(guān)注。