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