Shell變量:Shell變量的定義婶熬、使用和刪除

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

在 Bash shell 中性含,每一個(gè)變量的值都是字符串,無論你給變量賦值時(shí)有沒有使用引號(hào)鸳惯,值都會(huì)以字符串的形式存儲(chǔ)商蕴。

這意味著,Bash shell 在默認(rèn)情況下不會(huì)區(qū)分變量類型芝发,即使你將整數(shù)和小數(shù)賦值給變量绪商,它們也會(huì)被視為字符串,這一點(diǎn)和大部分的編程語言不同辅鲸。例如在C語言或者 C++ 中格郁,變量分為整數(shù)、小數(shù)独悴、字符串例书、布爾等多種類型。

當(dāng)然刻炒,如果有必要决采,你也可以使用 Shell declare 關(guān)鍵字顯式定義變量的類型,但在一般情況下沒有這個(gè)需求坟奥,Shell 開發(fā)者在編寫代碼時(shí)自行注意值的類型即可树瞭。

1拇厢、定義變量

1.1、Shell 支持以下三種定義變量的方式:

variable=value
variable='value'
variable="value"

variable 是變量名晒喷,value 是賦給變量的值孝偎。如果 value 不包含任何空白符(例如空格、Tab 縮進(jìn)等)厨埋,那么可以不使用引號(hào)邪媳;如果 value 包含了空白符,那么就必須使用引號(hào)包圍起來荡陷。使用單引號(hào)和使用雙引號(hào)也是有區(qū)別的雨效,稍后我們會(huì)詳細(xì)說明。

注意废赞,賦值號(hào)=的周圍不能有空格徽龟,這可能和你熟悉的大部分編程語言都不一樣。

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

變量定義舉例:

url=http://www.reibang.com/
echo $url
name='簡書'
echo $name
author="五公子"
echo $author

1.2、將命令的結(jié)果賦值給變量

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

variable=`command`
variable=$(command)

第一種方式把命令用反引號(hào)(位于 Esc 鍵的下方)包圍起來菠隆,反引號(hào)和單引號(hào)非常相似,容易產(chǎn)生混淆狂秘,所以不推薦使用這種方式骇径;第二種方式把命令用$()包圍起來,區(qū)分更加明顯者春,所以推薦使用這種方式破衔。

例如:

variable=`date`
variable=$(date)

1.3、只讀變量

使用 readonly 命令可以將變量定義為只讀變量钱烟,只讀變量的值不能被改變晰筛。

下面的例子嘗試更改只讀變量,結(jié)果報(bào)錯(cuò):


url="http://www.reibang.com/"
readonly url
url="http://www.reibang.com/"

運(yùn)行腳本拴袭,結(jié)果如下:

bash: url: readonly variable

1.4读第、修改變量的值

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

url="http://www.reibang.com/"
echo ${url}
url="http://www.reibang.com/shell/"
echo ${url}

只有在使用變量時(shí)才能加$。

2羊瘩、使用變量

使用一個(gè)定義過的變量泰佳,只要在變量名前面加美元符號(hào)$即可盼砍,如:

author="五公子"
echo $author
echo ${author} #推薦

變量名外面的花括號(hào){ }是可選的,加不加都行逝她,加花括號(hào)是為了幫助解釋器識(shí)別變量的邊界浇坐,比如下面這種情況:

skill="[Java](http://c.biancheng.net/java/)"
echo "I am good at ${skill}Script"

如果不給 skill 變量加花括號(hào),寫成echo "I am good at skillScript"黔宛,解釋器就會(huì)把skillScript 當(dāng)成一個(gè)變量(其值為空)近刘,代碼執(zhí)行結(jié)果就不是我們期望的樣子了。

推薦給所有變量加上花括號(hào){ }臀晃,這是個(gè)良好的編程習(xí)慣觉渴。

4.單引號(hào)和雙引號(hào)的區(qū)別

前面我們還留下一個(gè)疑問,定義變量時(shí)徽惋,變量的值可以由單引號(hào)' '包圍案淋,也可以由雙引號(hào)" "包圍,它們到底有什么區(qū)別呢险绘?不妨以下面的代碼為例來說明:

url="http://www.reibang.com/"
website1='簡書:${url}'
website2="簡書:${url}"
echo $website1
echo $website2

運(yùn)行結(jié)果:
簡書:${url}
簡書:http://www.reibang.com/

以單引號(hào)' '包圍變量的值時(shí)踢京,單引號(hào)里面是什么就輸出什么,即使內(nèi)容中有變量和命令(命令需要反引起來)也會(huì)把它們?cè)瓨虞敵龌鹿住_@種方式比較適合定義顯示純字符串的情況瓣距,即不希望解析變量、命令等的場(chǎng)景代咸。

以雙引號(hào)" "包圍變量的值時(shí)蹈丸,輸出時(shí)會(huì)先解析里面的變量和命令,而不是把雙引號(hào)中的變量名和命令原樣輸出侣背。這種方式比較適合字符串中附帶有變量和命令并且想將其解析后再輸出的變量定義白华。

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

3管搪、刪除變量

使用 unset 命令可以刪除變量。語法:

unset variable_name

變量被刪除后不能再次使用铡买;unset 命令不能刪除只讀變量更鲁。

例如:

myUrl="http://www.reibang.com/"
unset myUrl
echo ${myUrl}

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

轉(zhuǎn)載自:http://c.biancheng.net/view/743.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奇钞,一起剝皮案震驚了整個(gè)濱河市澡为,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌景埃,老刑警劉巖媒至,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件顶别,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡拒啰,警方通過查閱死者的電腦和手機(jī)驯绎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谋旦,“玉大人剩失,你說我怎么就攤上這事〔嶙牛” “怎么了拴孤?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長指蚜。 經(jīng)常有香客問我乞巧,道長,這世上最難降的妖魔是什么摊鸡? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任绽媒,我火速辦了婚禮,結(jié)果婚禮上免猾,老公的妹妹穿的比我還像新娘是辕。我一直安慰自己,他們只是感情好猎提,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布获三。 她就那樣靜靜地躺著,像睡著了一般锨苏。 火紅的嫁衣襯著肌膚如雪疙教。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天伞租,我揣著相機(jī)與錄音贞谓,去河邊找鬼。 笑死葵诈,一個(gè)胖子當(dāng)著我的面吹牛裸弦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播作喘,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼理疙,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了泞坦?” 一聲冷哼從身側(cè)響起窖贤,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后赃梧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體择吊,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年槽奕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片房轿。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡粤攒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出囱持,到底是詐尸還是另有隱情夯接,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布纷妆,位于F島的核電站盔几,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏掩幢。R本人自食惡果不足惜逊拍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望际邻。 院中可真熱鬧芯丧,春花似錦、人聲如沸世曾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轮听。三九已至骗露,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間血巍,已是汗流浹背萧锉。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留藻茂,地道東北人驹暑。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像辨赐,于是被迫代替她去往敵國和親优俘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容