佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 詳解shell 變量

詳解shell 變量

熱門標(biāo)簽:Linux服務(wù)器 呼叫中心市場需求 百度競價排名 鐵路電話系統(tǒng) AI電銷 網(wǎng)站排名優(yōu)化 服務(wù)外包 地方門戶網(wǎng)站

1.簡介

變量是任何一種編程語言都必不可少的組成部分,變量用來存放各種數(shù)據(jù)。腳本語言在定義變量時通常不需要指明類型,直接賦值就可以,Shell變量也遵循這個規(guī)則。

在Bash shell 中,每一個變量的值都是字符串,無論你給變量賦值時有沒有使用引號,值都會以字符串的形式存儲。這意味著,Bash shell 在默認(rèn)情況下不會區(qū)分變量類型,即使你將整數(shù)和小數(shù)賦值給變量,它們也會被視為字符串,這一點和大部分的編程語言不同。如C/C++ ,變量分為整數(shù)、浮點數(shù)、字符串、布爾等多種類型。當(dāng)然,如果有必要,你也可以使用declare/typeset Shell內(nèi)建命令顯式定義變量的類型,但在一般情況下沒有這個需求,Shell 開發(fā)者在編寫代碼時自行注意值的類型即可。

2.變量類型

Shell中按照變量的作用域和生命周期,Shell變量可分為四大類:

(1)永久環(huán)境變量:需要修改配置文件,變量永久生效。

(2)臨時環(huán)境變量:使用export命令行聲明即可,變量在Shell腳本進(jìn)程結(jié)束后仍然有效,但在關(guān)閉當(dāng)前Shell會話后失效。

(3)全局變量:在腳本中定義,僅在當(dāng)前Shell腳本中有效,其他Shell腳本進(jìn)程不能訪問,其作用域從定義的位置開始,到腳本結(jié)束或被顯示刪除的地方為止。注意,全局變量既可以在Shell函數(shù)內(nèi)定義,也可以在Shell函數(shù)外定義,因為Shell函數(shù)內(nèi)定義的變量默認(rèn)為global,且作用域從“函數(shù)被調(diào)用時執(zhí)行變量定義的地方”開始,到腳本結(jié)束或被顯示刪除的地方為止。

#!/bin/bash

globalVar=dablelv	#全局變量

(4)局部變量。在Shell腳本中函數(shù)內(nèi)顯示使用local關(guān)鍵字定義的變量。其作用域局限于函數(shù)內(nèi)。同名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 包含了空白符,那么就必須使用引號包圍起來。使用單引號和使用雙引號也是有區(qū)別的,稍后我們會詳細(xì)說明。注意,賦值號的周圍不能有空格,這可能和你熟悉的大部分編程語言都不一樣。

Shell變量的命名規(guī)范和大部分編程語言都一樣:
(1)變量名由數(shù)字、字母、下劃線組成;
(2)必須以字母或者下劃線開頭;
(3)不能使用Shell里的關(guān)鍵字(通過help命令可以查看保留關(guān)鍵字)。

變量定義示例:

name='dablelv'
home="安徽"
age=28

4.訪問變量

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

name="dablelv"
echo $name
echo ${name}

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

skill="Java"
echo "I am good at ${skill}Script"

如果不給skill變量加花括號,解釋器就會把$skillScript當(dāng)成一個變量(其值為空),代碼執(zhí)行結(jié)果就不是我們期望的樣子了。

推薦給所有變量加上花括號{ },這是個良好的編程習(xí)慣。

5.修改變量的值

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

name='dablelv'
echo $name
name="billwong"

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

6.單引號和雙引號的區(qū)別

定義變量時,變量的值可以由單引號包圍,也可以由雙引號包圍,它們到底有什么區(qū)別呢?不妨以下面的代碼為例來說明:

#!/bin/bash

name='dablelv'
str1='我的名字是${name}'
str2="我的名字是${name}"
echo $str1
echo $str2

運行結(jié)果:

我的名字是${name}
我的名字是dablelv

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

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

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

7.將命令的結(jié)果賦值給變量

Shell 也支持將命令的執(zhí)行結(jié)果賦值給變量,常見的有以下兩種方式:

variable=`command`
variable=$(command)

第一種方式把命令用反引號包圍起來,反引號和單引號非常相似,容易產(chǎn)生混淆,所以不推薦使用這種方式;第二種方式把命令用$()包圍起來,區(qū)分更加明顯,所以推薦使用這種方式。

例如將兩個數(shù)值相加賦給某一變量。

var1=1
var2=2
varAdd1=`expr $var1 + $var2`
varAdd2=$(expr $var1 + $var2)

8.只讀變量

使用readonly命令,或者使用declare -rtypeset -r可以將變量定義為只讀變量,只讀變量的值不能被改變。

name="dablelv"
readonly name

declare -r name="dablelv"

typeset -r name="dablelv"

9.刪除變量

使用unset內(nèi)置命令可以刪除變量。語法:

unset variable_name

unset命令不能刪除只讀變量。變量被刪除后不能再次使用。如

#!/bin/bash

name="dablelv"
unset name
echo $name

上面的腳本沒有任何輸出。

以上就是詳解shell 變量的詳細(xì)內(nèi)容,更多關(guān)于shell 變量的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 詳解shell 變量的高級用法示例
  • 處理Shell腳本中帶有空格的變量(bash腳本)
  • shell判斷一個變量是否為空方法總結(jié)
  • linux中shell的變量的數(shù)值計算
  • Shell編程之特殊變量和擴(kuò)展變量詳解
  • Shell編程之變量數(shù)值計算方法示例
  • shell for循環(huán)、循環(huán)變量值付給其他shell腳本的方法
  • 詳解Shell編程之變量數(shù)值計算(二)
  • 詳解Shell編程之變量數(shù)值計算(一)
  • 淺談linux中shell變量$#,$@,$0,$1,$2的含義解釋

標(biāo)簽:衡水 蘭州 銅川 湖南 崇左 仙桃 黃山 湘潭

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解shell 變量》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    怀柔区| 林甸县| 封开县| 新宾| 巴楚县| 称多县| 柯坪县| 光山县| 太仆寺旗| 马公市| 聊城市| 西乌珠穆沁旗| 城口县| 北辰区| 宜黄县| 崇信县| 白河县| 阳高县| 沾化县| 会同县| 金沙县| 合水县| 皮山县| 洛浦县| 敦煌市| 北辰区| 新营市| 大埔县| 聊城市| 上虞市| 南投县| 米泉市| 正宁县| 沂源县| 安宁市| 长宁区| 象州县| 博客| 阿荣旗| 新干县| 婺源县|