高階變數分為三個主題,1、變數擴充套件,2、命令替換,3、算術擴充套件
1、變數擴充套件
變數擴充套件基本型:$
變數擴充套件是一種簡易的條件判斷,對不同的條件賦予變數不同的替換值
變數擴充套件是對基本型加上條件判斷,如若條件符合,則進行變數替換,不符合則進行另乙個操作。
取消變數,則這個變數不存在或未定義。
比如
mysql='thirteen
'此時變數為非空
mysql=此時變數為空,值為null
1.1 測試變數與存在與否的基本用法
語法:$判斷條件:若變數不存在則滿足條件,就傳回預設值,不滿足則傳回變數的值
用例: unset mysql
r=$echo
$r因為unset了mysql所以變數不存在,因此echo $r的時候就會直接返回thirteen
1.2 測試變數「不存在」或其值為空:傳回預設值
語法:$判斷條件:若變數不存在或值為空則滿足條件,就傳回預設值,不滿足則傳回變數的值
用例: mysql=r=$
echo
$r因為mysql的值為空,因此echo $r的時候就會直接返回thirteen
1.3 測試變數的存在性
語法:$判斷條件:若變數存在且值為非空則滿足條件,就傳回真值,不滿足則傳回空值
用例: mysql='
exist
'r=$
echo
$r因為mysql存在且值為非空,因此echo $r的時候就會直接返回true
2、變數擴充套件:取字串切片、字串長度
去字串切片的語法有兩種:
1、語法:$
釋義:從位置起點取字串,知道字串結束
用例 mysql="
hanbimysql
"substr=$
echo
$substr
從第六個字元開始擷取字串,結果為mysql
2、
語法:$釋義:從位置起點取字串,擷取指定長度的字串
用例 mysql="hanbimysql"substr=$
echo$substr
從第六個字元開始擷取字串長度為1的字串
計算字串長度
語法:$釋義:傳回變數值的字串長度
用例 mysql="
hanbimysql
"echo
$直接返回mysql的字串長度為10
這個方法與取陣列元素個數有些類似,取陣列元素個數方法如下
1、$2、$
3、變數擴充套件:對比樣式
這裡的對比樣式的意思是擷取字串的某一部分:做法是將其刪除或替換
3.1、由字串前面對比,刪除相符者
從左開始匹配的語法如下
語法:$釋義:從字串左邊開始匹配,然後刪除「最短相符合的字串」
用例: filename="/
usr/sbin/ntpdate
"r=$
echo $r
說明:對比的樣式為/
*/,/*
/的意思為凡是碰到雙斜線內有字串(空字串也算)的,則對比符合。因為最後匹配到的最短的為/usr/,
echo $r返回的則為sbin/ntpdate
如果filename為//usr/sbin/ntpdate,則最後返回的是usr/sbin/ntpdate
上面為刪除最短如果要刪除最長的則用以下語法
語法:$釋義:從字串左邊開始匹配,然後刪除「最長相符合的字串」
用例: filename="/usr/sbin/ntpdate"r=$
echo $r
說明:對比的樣式為/*/,/*/的意思為凡是碰到雙斜線內有字串(空字串也算)的,則對比符合。因為最後匹配到的最短的為/usr/sbin/,
echo $r返回的則為ntpdate
從右開始匹配的語法如下
語法:$釋義:從字串右邊開始匹配,然後刪除「最短相符合的字串」
用例: filename="
/usr/sbin/ntpdate
"r=$
echo $r
說明:對比的樣式為/*,/
*/的意思為凡是碰到斜線後有字串(空字串也算)的,則對比符合。因為最後匹配到的最短的為/ntpdate,
echo $r返回的則為usr/sbin
上面為刪除最短如果要刪除最長的則用以下語法
語法:$
釋義:從字串右邊開始匹配,然後刪除「最長相符合的字串」
用例: filename="
/usr/sbin/ntpdate
"r=$
echo $r
說明:因為最後匹配到的最長的為/usr/sbin/ntpdate,
echo $r返回的則為空
上述為刪除,如果要取代字串則用如下語法,舉個栗子
語法:$釋義:從字串中匹配樣式,如果有匹配的樣式則取最長的子字串然後用替換字串替代
用例: filename="
13.13.13.13:131
"r=$
echo
$r說明::會被替代為.,則輸出的結果為13.
13.13.13.131
如果要全部替代則語法為$
如果要把替換的字串刪掉(只刪第乙個)則語法為$
刪除全部則為$
如果要求樣式在句首或句尾:句首$,句尾$
4、變數擴充套件:取變數名稱列表、陣列索引列表
取變數名稱列表
語法:$或$釋義:把所有變數名符合開頭字串的變數列印出來,各變數之間用$ifs定義的第乙個分隔符隔開
用例: filename=
dir=dir2=
echo $
說明:列印了di開頭的變數名,
dir 和dir2
取陣列索引列表
語法:$或$釋義:把陣列變數的所有索引列出來,各索引值之間用$ifs定義的第乙個分隔符隔開
用例: arr=(12345) r=$
echo
$r 說明:列印值為0 12
34如果擴充套件式使用@符號,並且出現在雙引號中,如for i in "$",name這裡面返回的不是乙個整的字串,
每個索引值返回的都是單獨的字串
2、命令替換
所謂命令替換就是將命令執行後的標準輸出放入變數當中。比如使用ls命令之後,如何將列印出來的檔名放入變數當中以便後續的使用。
語法:新式寫法:變數名稱=$(命令)
舊式寫法:變數名稱=`命令`「`"
這個不是單引號!
bash會在執行命令後產生的標準輸出,賦值給指定的變數。這個過程中,會預設刪除換行字元
3、算術擴充套件
因為bash的變數預設是沒有資料型,全部以字串視之。因此在賦值變數的需要乙個算術擴充套件
比如:i=1+1
這個時候如果你進行ech $i
那麼他輸出的是1+1而不是2
如果要在進行賦值的時候進行算術操作則使用以下語法
i=$((1+1))
Python學習筆記 變數的高階
變數高階 1 變數的引用 變數和資料都是儲存在記憶體中的 在python中函式的引數傳遞以及返回值都是靠引用傳遞的 2 引用的概念 在python中 變數和資料都是分開儲存的 資料儲存在記憶體中的乙個位置 變數儲存著資料在記憶體中的位址 變數中記錄資料的位址,就叫做引用 使用id 函式可以檢視變數中...
python學習筆記 10 變數高階
在python中 在python中,變數的名字類似於便簽紙貼在資料上。a 1print id a b a print id b a 2 print id a b a print id b output 140709511300768 140709511300768 140709511300800 1...
Linux學習筆記(指令碼變數)
作業系統 centos 6.5,使用者root 前兩天看鳥哥的linux私房菜,到shell指令碼這一塊兒,發現以前的基礎真心沒打好,就標了個書籤,想寫個blog記下來,然後就沒然後了,忘了。今天繼續看的時候,看到linux啟動流程,然後vi etc profile,其他的shell語句都能看懂,忽...