您好,登錄后才能下訂單哦!
這篇文章運用簡單易懂的例子給大家介紹一文帶你讀懂shell 變量,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
1.簡介
變量是任何一種編程語言都必不可少的組成部分,變量用來存放各種數據。腳本語言在定義變量時通常不需要指明類型,直接賦值就可以,Shell變量也遵循這個規則。
在Bash shell 中,每一個變量的值都是字符串,無論你給變量賦值時有沒有使用引號,值都會以字符串的形式存儲。這意味著,Bash shell 在默認情況下不會區分變量類型,即使你將整數和小數賦值給變量,它們也會被視為字符串,這一點和大部分的編程語言不同。如C/C++ ,變量分為整數、浮點數、字符串、布爾等多種類型。當然,如果有必要,你也可以使用declare/typeset Shell內建命令顯式定義變量的類型,但在一般情況下沒有這個需求,Shell 開發者在編寫代碼時自行注意值的類型即可。
2.變量類型
Shell中按照變量的作用域和生命周期,Shell變量可分為四大類:
(1)永久環境變量:需要修改配置文件,變量永久生效。
(2)臨時環境變量:使用export命令行聲明即可,變量在Shell腳本進程結束后仍然有效,但在關閉當前Shell會話后失效。
(3)全局變量:在腳本中定義,僅在當前Shell腳本中有效,其他Shell腳本進程不能訪問,其作用域從定義的位置開始,到腳本結束或被顯示刪除的地方為止。注意,全局變量既可以在Shell函數內定義,也可以在Shell函數外定義,因為Shell函數內定義的變量默認為global,且作用域從“函數被調用時執行變量定義的地方”開始,到腳本結束或被顯示刪除的地方為止。
#!/bin/bash globalVar=dablelv #全局變量
(4)局部變量。在Shell腳本中函數內顯示使用local關鍵字定義的變量。其作用域局限于函數內。同名local變量會屏蔽global變量。
#!/bin/bash function test() { local localVar=dablelv #局部變量 } test echo $localVar #輸出為空
3.定義變量
Shell 支持以下三種定義變量的方式:
var=value var='value' var="value"
var是變量名,value是賦給變量的值。如果value不包含任何空白符(例如空格、Tab等),那么可以不使用引號;如果value 包含了空白符,那么就必須使用引號包圍起來。使用單引號和使用雙引號也是有區別的,稍后我們會詳細說明。注意,賦值號的周圍不能有空格,這可能和你熟悉的大部分編程語言都不一樣。
Shell變量的命名規范和大部分編程語言都一樣:
(1)變量名由數字、字母、下劃線組成;
(2)必須以字母或者下劃線開頭;
(3)不能使用Shell里的關鍵字(通過help命令可以查看保留關鍵字)。
變量定義示例:
name='dablelv' home="安徽" age=28
4.訪問變量
使用一個定義過的變量,只要在變量名前面加美元符號$即可,如:
name="dablelv" echo $name echo ${name}
變量名外面的花括號{}是可選的,加不加都行,加花括號是為了幫助解釋器識別變量的邊界,比如下面這種情況:
skill="Java" echo "I am good at ${skill}Script"
如果不給skill變量加花括號,解釋器就會把$skillScript
當成一個變量(其值為空),代碼執行結果就不是我們期望的樣子了。
推薦給所有變量加上花括號{ },這是個良好的編程習慣。
5.修改變量的值
已定義的變量,可以被重新賦值,如:
name='dablelv' echo $name name="billwong"
第二次對變量賦值時不能在變量名前加,只有在使用變量時才能加,只有在使用變量時才能加,只有在使用變量時才能加。
6.單引號和雙引號的區別
定義變量時,變量的值可以由單引號包圍,也可以由雙引號包圍,它們到底有什么區別呢?不妨以下面的代碼為例來說明:
#!/bin/bash name='dablelv' str1='我的名字是${name}' str2="我的名字是${name}" echo $str1 echo $str2
運行結果:
我的名字是${name}
我的名字是dablelv
以單引號包圍變量的值時,單引號里面是什么就輸出什么,即使內容中有變量和命令(命令需要反引起來)也會把它們原樣輸出。這種方式比較適合定義顯示純字符串的情況,即不希望解析變量、命令等的場景。
以雙引號包圍變量的值時,輸出時會先解析里面的變量和命令,而不是把雙引號中的變量名和命令原樣輸出。這種方式比較適合字符串中附帶有變量和命令并且想將其解析后再輸出的變量定義。
建議:如果變量的內容是數字,那么可以不加引號;如果真的需要原樣輸出就加單引號;其他沒有特別要求的字符串等最好都加上雙引號,定義變量時加雙引號是最常見的使用場景。
7.將命令的結果賦值給變量
Shell 也支持將命令的執行結果賦值給變量,常見的有以下兩種方式:
variable=`command` variable=$(command)
第一種方式把命令用反引號包圍起來,反引號和單引號非常相似,容易產生混淆,所以不推薦使用這種方式;第二種方式把命令用$()
包圍起來,區分更加明顯,所以推薦使用這種方式。
例如將兩個數值相加賦給某一變量。
var1=1 var2=2 varAdd1=`expr $var1 + $var2` varAdd2=$(expr $var1 + $var2)
8.只讀變量
使用readonly命令,或者使用declare -r
或typeset -r
可以將變量定義為只讀變量,只讀變量的值不能被改變。
name="dablelv" readonly name declare -r name="dablelv" typeset -r name="dablelv"
9.刪除變量
使用unset內置命令可以刪除變量。語法:
unset variable_name
unset命令不能刪除只讀變量。變量被刪除后不能再次使用。如
#!/bin/bash name="dablelv" unset name echo $name
關于一文帶你讀懂shell 變量就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。