bash 腳本中關(guān)于變量的一些用法總結(jié)
我們先前寫(xiě)過(guò)關(guān)于 ??bash 腳本中變量的用法???。其一般使用方式為,使用一個(gè)變量存儲(chǔ)一些數(shù)據(jù),然后調(diào)用變量,如下所示:?
除了上面這種用法之外,針對(duì)變量還可以有其他的一些操作,比如在未設(shè)置變量時(shí)設(shè)置一個(gè)默認(rèn)值,以及為單個(gè)變量分配多個(gè)值等。
下面我們來(lái)詳細(xì)看一下。
使用數(shù)組
數(shù)組在 bash 腳本中是經(jīng)常會(huì)用到的一種數(shù)據(jù)類(lèi)型。其定義方法為:
上述腳本,是在數(shù)組 name 中定義了兩個(gè)變量,分別是 tiap 和 linux。
那么,如何訪(fǎng)問(wèn)這些值呢?
如果你運(yùn)行 echo $name,會(huì)看到它只打印第一個(gè)值,tiap。訪(fǎng)問(wèn)其他的值需要使用另外的方式,即使用 ${variable[number]} 語(yǔ)法從數(shù)組變量中提取特定的值。如下所示:
上面腳本將打印 "hello, linux!"
與其他大多數(shù)編程語(yǔ)言類(lèi)似,數(shù)組索引的順序,是從 0 開(kāi)始的。所以,訪(fǎng)問(wèn)第一個(gè)元素的方式為:
它與 echo "hello, $name!" 的結(jié)果是完全相同的,由此可見(jiàn),訪(fǎng)問(wèn)數(shù)組的時(shí)候,其索引值 [number] 是可以省略的,當(dāng)省略索引值的時(shí)候,取默認(rèn)值 0。
索引僅表示項(xiàng)在數(shù)組中的位置,所以索引0是數(shù)組中的第一個(gè)元素。
未設(shè)置變量時(shí)使用默認(rèn)值
當(dāng)變量未按以下方式設(shè)置時(shí),可以將變量默認(rèn)設(shè)置為某個(gè)字符串:
看下面的例子:
由于變量 name 沒(méi)有設(shè)置任何值,所以它會(huì)使用 nobody 作為默認(rèn)值,所以上述腳本將會(huì)打印 "hello, nobody!"。
如果預(yù)先設(shè)置了變量值,當(dāng)然會(huì)使用為其設(shè)置的值:?
其結(jié)果為 "hello, tiap!"
在已設(shè)置變量值時(shí)修改值
我們還可以設(shè)置變量以在設(shè)置變量時(shí)返回某個(gè)值。這將導(dǎo)致變量在設(shè)置時(shí)打印某個(gè)字符串,而在未設(shè)置時(shí)不打印任何字符串。其語(yǔ)法結(jié)構(gòu)如下:
看下面的例子:
由于變量 name 沒(méi)有設(shè)置,所以它只會(huì)打印 "hello !"。
修改上面的腳本,為變量 name 設(shè)置一個(gè)值,它將不會(huì)使用為其設(shè)置的值,而是使用調(diào)用的時(shí)候提供的值:?
上述腳本的結(jié)果為 "hello person!"。
變量的間接引用
看下面的語(yǔ)法結(jié)構(gòu):
這個(gè)在功能上優(yōu)點(diǎn)復(fù)雜,但是當(dāng)你了解它的工作原理后,就很容易理解了,看下面的例子:?
上述腳本將會(huì)打印 "hello tiap!"。
變量名前面的感嘆號(hào) ! 會(huì)替換變量名,然后在查找該變量名的相關(guān)變量值。
計(jì)算變量的長(zhǎng)度
現(xiàn)在我們?cè)賮?lái)看如下語(yǔ)法結(jié)構(gòu):
它將會(huì)打印變量的長(zhǎng)度,但是會(huì)根據(jù)變量是字符串還是數(shù)組而略有不同。
如果變量為字符串,那么將會(huì)返回字符串中字符的個(gè)數(shù),如下所示:?
上述腳本的結(jié)果為 4。
如果變量為數(shù)組,那么將會(huì)打印數(shù)組中元素的個(gè)數(shù),看下面的例子,其結(jié)果將會(huì)打印 2:?
小寫(xiě)和大寫(xiě)字符串
要改變變量值的大小寫(xiě),可以分別使用運(yùn)算符 ^ 和,,如下所示:?
上述腳本中,一個(gè)運(yùn)算符 ^ 和兩個(gè)^^ 有什么區(qū)別呢?一個(gè)運(yùn)算符(比如 ${variable^} )只會(huì)修改變量值中的第一個(gè)字母,而兩個(gè)運(yùn)算符的時(shí)候(比如 ${variable^^})會(huì)修改整個(gè)字符串。比如:?
結(jié)果將為:Name。
而:
其結(jié)果將會(huì)為:NAME。
同樣,小寫(xiě)轉(zhuǎn)換符也是一樣。下面腳本將會(huì)打?。?span style="background-color: #d6fad6;">wIDEname
而下面腳本將會(huì)打印:widename