詳解shell 變數

2022-09-26 13:24:33 字數 3160 閱讀 6995

1.簡介

變數是任何一種程式語言都必不可少的組成部分,變數用來存放各種資料。指令碼語言在定義變數時通常不需要指明型別,直接賦值就可以,shell變數也遵循這個規則。

在bash shell 中,每乙個變數的值都是字串,無論你給變數賦值時有沒有使用引號,值都會以字串的形式儲存。這意味著,bash shell 在預設情況下不會區分變數型別,即使你將整數和小數賦值給變數,它們也會被視為字串,這一點和大部分的程式語言不同。如c/c++ ,變數分為整數、浮點數、字串、布林等多種型別。當然,如果有必要,你也可以使用declare/typeset shell內建命令顯式定義變數的型別,但在一般情況下沒有這個需求,shell 開發者在編寫**時自行注意值的型別即可。

2.變數型別

shell中按照變數的作用域和生命週期,shell變數可分為四大類:

(1)永久環境變數:需要修改配置檔案,變數永久生效。

(2)臨時環境變數:使用export命令列宣告即可,變數在shell指令碼程序結束後仍然有效,但在關閉當前shell會話後失效。

(3)全域性變數:在指令碼中定義,僅在當前shell指令碼中有效,其他shell指令碼程序不能訪問,其gzzxmgefoy作用域從定義的位置開始,到指令碼結束或被顯示刪除的地方為止。注意,全域性變數既可以在shell函式內定義,也可以在shell函式外定義,因為shell函式內定義的變數預設為global,且作用域從「函式被呼叫時執行變數定義的地方」開始,到指令碼結束或被顯示刪除的地方為止。

#!/bin/bash

globalvar=dablelv #全域性變數

(4)區域性變數。在shell指令碼中函式內顯示使用local關鍵字定義的變數。其作用域侷限於函式內。同名local變數會遮蔽global變數。

#!/bin/bash

function test()

test

echo $localvar #輸出為空

3.定義變數

shell 支援以下三種定義變數的方式:

var=value

var='value'

var="value"

var是變數名,value是賦給變數的值。如果value不包含任何空白符(例如空格、tab等),那麼可以不使用引號;如果value 包含了空白符,那麼就必須使用引號包圍起來。使用單引號和使用雙引號也是有區別的,稍後我們會詳細說明。注意,賦值號的周圍不能有空格,這可能和你熟悉的大部分程式語言都不一樣。

shell變數的命名規範和大部分程式語言都一樣:

(1)變數名由數字、字母、下劃線組成;

(2)必須以字母或者下劃線開頭;

(3)不能使用shell裡的關鍵字(通過help命令可以檢視保留關鍵字)。

變數定義示例:

name='dabl'

home="安徽"

age=28

4.訪問變數

使用乙個定義過的變數,只要在變數名前面加美元符號$即可,如:

name="dablelv"

echo $name

echo $

變數名外面的花括號{}是可選的,加不加都行,加花括號是為了幫助直譯器識別變數的邊界,比如下面這種情況:

skill="j**a"

echo "i am good at $script"

如果不給skill變數加花括號,直譯器就會把$skillscript當成乙個變數(其值為空),**執行結果就不是我們期望的樣子了。

推薦給所有變數加上花括號,這是個良好的程式設計習慣。

5.修改變數的值

已定義的變數,可以被重新賦值,如:

name='dablelv'

echo $name

name="billwonwww.cppcns.comg"

第二次對變數賦值時不能在變數名前加,只有在使用變數時才能gzzxmgefoy加,只有在使用變數時才能加,只有在使用變數時才能加。

6.單引號和雙引號的區別

定義變數時,變數的值可以由單引號包圍,也可以由雙引號包圍,它們到底有什麼區別呢?不妨以下面的**為例來說明:

#!/bin/bash

name='dablelv'

str1='我的名字是$'

str2="我的名字是$"

echo $str1

echo $str2

執行結果:

我的名字是$

我的名字是dablelv

以單引號包圍變數的值時,單引號裡面是什麼就輸出什麼,即使內容中有變數和命令(命令需要反引起來)也會把它們原樣輸出。這種方式比較適合gzzxmgefoy定義顯示純字串的情況,即不希望解析變數、命令等的場景。

以雙引號包圍變數的值時,輸出時會先解析裡面的變數和命令,而不是把雙引號中的變數名和命令原樣輸出。這種方式比較適合字串中附帶有變數和命令並且想將其解析後再輸出的變數定義。

建議:如果變數的內容是數字,那麼可以不加引號;如果真的需要原樣輸出就加單引號;其他沒有特別要求的字串等最好都加上雙引號,定義變數時加雙引號是最常見的使用場景。

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變數詳解

1 shell變數基礎 shell變數是一種很 弱 的變數,預設情況下,乙個變數儲存乙個串,shell不關心這個串是什麼含義。所以若要進行數 算,必須使用一些命令例如let declare expr 雙括號等。shell變數可分為兩類 區域性變數和環境變數。區域性變數只在建立它們的shell中可用。...

Shell變數基礎詳解 Authority

一 變數簡介 變數是暫時儲存資料的地方及資料標記,所儲存的資料存在於記憶體空間中,通過正確地呼叫記憶體空間中變數的名字就可以取出與變數對應的資料。使用變數的最大好處就是使程式開發更為方便,當然,在程式設計中使用變數也是必須的。否則就很難完成相關的工作。變數賦值的方式 先寫變數名稱,緊接著就是 最後是...

變數 shell變數( )

變數型別 執行shell時,會同時存在三種變數 a 區域性變數 在指令碼或命令中定義,僅在當前shell例項中有效,其他shell啟動的程式不能訪問區域性變數。b 環境變數 所有的程式,包括shell啟動的程式,都能訪問環境變數,有些程式需要環境變數來保證其正常執行。必要時shell指令碼也可以定義...