Bash 初學(xué)者系列 6:bash 中的字符串操作
我們?cè)谇懊娴奈恼轮薪榻B過 ??bash 中的變量???,了解到在 bash 中是沒有比如字符串、整型等數(shù)據(jù)類型的,所有的都統(tǒng)稱為變量。
但是,這并不意味著在 bash 中沒有字符串操作函數(shù)。今天我們就來介紹一下字符串操作函數(shù),如何獲取字符串長度、連接字符串、提取子字符串、替換子字符串等。
獲取字符串長度
字符串其實(shí)是字符的序列(數(shù)組),我們先創(chuàng)建一個(gè)名為 distro 的字符串,內(nèi)容初始化為 Ubuntu。
要獲取字符串的長度,只需在變量名錢添加 # 即可,如下所示:?
上述代碼中,echo 命令用于打印值,{#string} 給出字符串的長度。
連接兩個(gè)字符串
可以將一個(gè)字符串拼接到另一個(gè)字符串的末尾,為了演示,我們首先創(chuàng)建兩個(gè)字符串str1和str2,如下所示:?
下面我們拼接這兩個(gè)字符串,得到一個(gè)新字符串,賦值給變量 str3,如下所示:
查找子字符串
可以查找某個(gè)字符或者字符串在另一個(gè)字符串中的位置(索引)。我們首先創(chuàng)建一個(gè)名為 str 的字符串,如下所示:
我們可以使用 expr 命令來獲取字符串 Cool 在 str 中的位置(索引):?
上述例子中,結(jié)果 9 就是單詞 "Cool" 在 str 中的索引位置。
提取子字符串
我們可以從一個(gè)字符串中提取子字符串,比如獲取其中的一個(gè)字符、一個(gè)或幾個(gè)單詞。
我們首先創(chuàng)建一個(gè)名為 foss 的字符串變量:
假設(shè)我們要提取 foss 中的第一個(gè)單詞 "Fedora",那么需要提供單詞在字符串中的起始位置(索引)以及要提取的字符數(shù)。所以,我們需要提供的參數(shù)為:0 作為起始位置,提取 6 個(gè)字符,如下代碼所示:?
注意,字符串中的第一個(gè)位置是零,就像??bash中的數(shù)組???一樣。也可以只指定子字符串的起始位置,而忽略字符數(shù)。在這種情況下,將提取從字符串的起始位置到結(jié)尾的所有內(nèi)容。
例如,從foss字符串中提取子字符串“free operating system”, 我們只需要指定起始位置12:?
字符串替換
可以將某一字符串中的子字符串,替換為另一個(gè)字符串。比如,我們可以將上面例子中 foss 字符串中的 “Fedoras”替換為“Ubuntu”,如下所示:?
再比如,將子字符串“free”替換為“popular”:
上面例子中,我們使用 echo 命令打印結(jié)果,原始字符串是不會(huì)被改變的。
刪除子字符串
也可以刪除子字符串。為了演示,我們首先創(chuàng)建一個(gè)名為 fact 的字符串,如下所示:
我們從 fact 字符串中刪除字符串“big”:?
另外一個(gè)例子,我們創(chuàng)建一個(gè)新字符串 cell:
假設(shè)我們這次的目的是要?jiǎng)h除 cell 中所有的破折號(hào);那下面的語句只會(huì)刪除 cell 中的第一個(gè)破折號(hào):
要?jiǎng)h除 cell 中所有的破折號(hào),需要使用雙斜杠,如下所示:
這里需要注意,跟上面的例子一樣,我們是使用 echo 命令打印的結(jié)果(結(jié)果也可以賦值給另外一個(gè)變量),因此原字符串(變量)cell 是沒有被改變的。
如果要修改原字符串,只需要將結(jié)果在分配回字符串即可:?
大小寫轉(zhuǎn)換
可以對(duì)字符串中的字母進(jìn)行大小寫轉(zhuǎn)換。我們先創(chuàng)建兩個(gè)字符串,分別命名為 legend 和 actor:?
首先演示將 legend 中的字母全部轉(zhuǎn)為大寫:
然后我們將 actor 中的字母轉(zhuǎn)為小寫:?
或者將 legend 中的第一個(gè)字母轉(zhuǎn)為大寫:
或者,將 actor 中的第一個(gè)字母轉(zhuǎn)為小寫:
此外,還可以將字符串中的某些字符改為大寫或小寫。比如,我們可以將 legend 中的字母 j 和 n 轉(zhuǎn)為大寫:?