新聞中心

在 Bash shell 中,每一個(gè)變量的值都是字符串,無(wú)論你給變量賦值時(shí)有沒有使用引號(hào),值都會(huì)以字符串的形式存儲(chǔ)。
這意味著,Bash shell 在默認(rèn)情況下不會(huì)區(qū)分變量類型,即使你將整數(shù)和小數(shù)賦值給變量,它們也會(huì)被視為字符串,這一點(diǎn)和大部分的編程語(yǔ)言不同。例如在C語(yǔ)言或者 C++ 中,變量分為整數(shù)、小數(shù)、字符串、布爾等多種類型。
當(dāng)然,如果有必要,你也可以使用 Shell declare 關(guān)鍵字顯式定義變量的類型,但在一般情況下沒有這個(gè)需求,Shell 開發(fā)者在編寫代碼時(shí)自行注意值的類型即可。
定義變量
Shell 支持以下三種定義變量的方式:
variable=value
variable='value'
variable="value"
variable 是變量名,value 是賦給變量的值。如果 value 不包含任何空白符(例如空格、Tab 縮進(jìn)等),那么可以不使用引號(hào);如果 value 包含了空白符,那么就必須使用引號(hào)包圍起來(lái)。使用單引號(hào)和使用雙引號(hào)也是有區(qū)別的,稍后我們會(huì)詳細(xì)說(shuō)明。
注意,賦值號(hào)=的周圍不能有空格,這可能和你熟悉的大部分編程語(yǔ)言都不一樣。
Shell 變量的命名規(guī)范和大部分編程語(yǔ)言都一樣:
- 變量名由數(shù)字、字母、下劃線組成;
- 必須以字母或者下劃線開頭;
- 不能使用 Shell 里的關(guān)鍵字(通過(guò) help 命令可以查看保留關(guān)鍵字)。
變量定義舉例:
url=http://c.biancheng.net/shell/ echo $url name='C語(yǔ)言中文網(wǎng)' echo $name author="嚴(yán)長(zhǎng)生" echo $author
使用變量
使用一個(gè)定義過(guò)的變量,只要在變量名前面加美元符號(hào)$即可,如:
author="嚴(yán)長(zhǎng)生"
echo $author
echo ${author} 變量名外面的花括號(hào){ }是可選的,加不加都行,加花括號(hào)是為了幫助解釋器識(shí)別變量的邊界,比如下面這種情況:
skill="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í)慣。
修改變量的值
已定義的變量,可以被重新賦值,如:
url="http://c.biancheng.net"
echo ${url}
url="http://c.biancheng.net/shell/"
echo ${url} 第二次對(duì)變量賦值時(shí)不能在變量名前加$,只有在使用變量時(shí)才能加$。
單引號(hào)和雙引號(hào)的區(qū)別
前面我們還留下一個(gè)疑問,定義變量時(shí),變量的值可以由單引號(hào)' '包圍,也可以由雙引號(hào)" "包圍,它們到底有什么區(qū)別呢?不妨以下面的代碼為例來(lái)說(shuō)明:
#!/bin/bash
url="http://c.biancheng.net"
website1='C語(yǔ)言中文網(wǎng):${url}'
website2="C語(yǔ)言中文網(wǎng):${url}"
echo $website1
echo $website2 運(yùn)行結(jié)果:
C語(yǔ)言中文網(wǎng):${url}
C語(yǔ)言中文網(wǎng):http://c.biancheng.net
以單引號(hào)' '包圍變量的值時(shí),單引號(hào)里面是什么就輸出什么,即使內(nèi)容中有變量和命令(命令需要反引起來(lá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)景。
將命令的結(jié)果賦值給變量
Shell 也支持將命令的執(zhí)行結(jié)果賦值給變量,常見的有以下兩種方式:
variable=`command`
variable=$(command)
第一種方式把命令用反引號(hào)` `(位于 Esc 鍵的下方)包圍起來(lái),反引號(hào)和單引號(hào)非常相似,容易產(chǎn)生混淆,所以不推薦使用這種方式;第二種方式把命令用$()包圍起來(lái),區(qū)分更加明顯,所以推薦使用這種方式。
例如,我在 demo 目錄中創(chuàng)建了一個(gè)名為 log.txt 的文本文件,用來(lái)記錄我的日常工作。下面的代碼中,使用 cat 命令將 log.txt 的內(nèi)容讀取出來(lái),并賦值給一個(gè)變量,然后使用 echo 命令輸出。
[mozhiyan@localhost ~]$ cd demo [mozhiyan@localhost demo]$ log=$(cat log.txt) [mozhiyan@localhost demo]$ echo $log 嚴(yán)長(zhǎng)生正在編寫Shell教程,教程地址:http://c.biancheng.net/shell/ [mozhiyan@localhost demo]$ log=`cat log.txt` [mozhiyan@localhost demo]$ echo $log 嚴(yán)長(zhǎng)生正在編寫Shell教程,教程地址:http://c.biancheng.net/shell/
只讀變量
使用
readonly 命令可以將變量定義為只讀變量,只讀變量的值不能被改變。
下面的例子嘗試更改只讀變量,結(jié)果報(bào)錯(cuò):
#!/bin/bash myUrl="http://c.biancheng.net/shell/" readonly myUrl myUrl="http://c.biancheng.net/shell/"
運(yùn)行腳本,結(jié)果如下:
bash: myUrl: This variable is read only.
刪除變量
使用
unset 命令可以刪除變量。語(yǔ)法:
unset variable_name
變量被刪除后不能再次使用;unset 命令不能刪除只讀變量。
舉個(gè)例子:
#!/bin/sh myUrl="http://c.biancheng.net/shell/" unset myUrl echo $myUrl
上面的腳本沒有任何輸出。
網(wǎng)站名稱:Shell變量:Shell變量的定義、賦值和刪除
分享鏈接:http://www.5511xx.com/article/dhocdos.html


咨詢
建站咨詢
