Linux命令(6/28)——declare/typeset命令
declare 與 typeset 命令是bash的內建命令,兩者是完全一樣的,用來聲明shell變量,設置變量的屬性。
declare命令(別名typeset)屬shell內建命令,用於申明shell變量並設置變量屬性,或查看已定義的shell變量和函數。若不加上任何參數,則會顯示全部的shell變量與函數(與執行set指令的效果相同)。
常用命令參數
-
-r 設置變量為只讀
-
-i 設置變量為整數
-
-a 設置變量為數組array
-
-f 如果後面沒有參數的話會列出之前腳本定義的所有函數,如果有參數的話列出以參數命名的函數
-
-x 設置變量在腳本外也可以訪問到
-a:申明數組變量 -A:申明關聯數組,可以使用字符串作為數組索引 -f:僅顯示已定義的函數 -F:不顯示函數定義 -i:聲明整型變量 -l:將變量值的小寫字母變為小寫 -u:變量值的大寫字母變為大寫 -r:設置只讀屬性 -t:設置變量跟蹤屬性,用於跟蹤函數進行調試,對於變量沒有特殊意義 -x:將指定的shell變量換成環境變量 -p:顯示變量定義的方式和值 +:取消變量屬性,但是+a和+r無效,無法刪除數組和只讀屬性,可以使用unset刪除數組,但是unset不能刪除只讀變量
(1)定義關聯數組並訪問。
declare -A assArray=([lucy]=beijing [yoona]=shanghai)
#讀取關聯數組全部內容
echo ${assArray[*]}
#或
echo ${assArray[@]}
#輸出
beijing shanghai
#讀取指定索引的數組值
echo ${assArray[lucy]}
#輸出:
beijing
#列出數組索引列表
echo ${!assArray[*]}
#或
echo ${!assArray[@]}
#輸出
yoona lucy
(2)定義只讀變量
declare -r name1="lvlv1"
#或
typeset -r name2="lvlv2"
#或
readonly name3="lvlv3"
Shell規定,只讀變量生命周期與當前Shell腳本進程相同,且不能消除只讀屬性和刪除只讀變量,除非kill當前Shell腳本進程。
(3)使用-p
選項顯示變量name1和name2的定義方式和當前值。
declare -p name1 name2 name3
#輸出
declare -r name1="lvlv1"
declare -r name2="lvlv2"
declare -r name3="lvlv3"
(4)使用-x
選項將shell變量轉換為臨時環境變量,供當前Shell會話的其他shell進程使用,退出當前Shell會話則失效。
declare -x name1;
(5)顯示所有shell環境變量。
declare -x
(6)使用+x
選項取消變量為環境變量。
delcare +x name1
(7)申明整型變量,賦值浮點型數值將報錯。
declare -i integer=666
格式:declare -p var
格式:typeset -p var
顯示指定變量var的值。
格式:declare var=value
格式:typeset var=value
格式:var=value
聲明變量並賦值。
格式:declare -i var
格式:typeset -i var
將變量var定義成整數。在之後就可以直接對表達式求值,結果只能是整數。如果求值失敗或者不是整數,就設置為0。
格式:declare -r var
格式:typeset -r var
格式:readonly var
將變量var聲明為只讀變量。只讀變量不允許修改,也不允許刪除。
格式:declare -a var
格式:typeset -a var
將變量var聲明為數組變量。但這沒有必要。所有變量都不必顯式定義就可以用作數組。事實上,在某種意義上,似乎所有變量都是數組,而且賦值給沒有下標的變量與賦值給"[0]"相同。
格式:declare -f
格式:typeset -f
顯示所有自定義函數,包括名稱和函數體。
格式:declare -F
格式:typeset -F
顯示所有自定義函數名稱。
格式:declare -f func
格式:typeset -f func
只顯示指定函數func的函數定義。
格式:declare -x var
格式:typeset -x var
格式:export var
將變量var設置成環境變量,這樣在隨後的腳本和程序中可以使用。
格式:declare -x var=value
格式:typeset -x var=value
格式:export var=value
將變量var設置成環境變量,並賦值為value。
Linux下Bash的變量使用,echo,read,declare,typeset,array,local
變量設定規則
1、變量與變量內容用一個等號來連接
myname=del1214
2、等號兩邊不能直接接空格,下面的賦值是錯誤的
myname = del1214 或 myname= del 1214
3、變量名只能是英文字母與數字,但第一個字符不能使數字,下面是錯誤的
1myname=del1214
4、變量內容有空格符可以用雙引號"或單引號‘使內容連接起來,但
雙引號內的特殊字符$,可以保留原有的特性,如下:
var="lang is $LANG" 則echo $var 顯示 lang is en_US
單引號內的特殊字符則為一般字符,如下:
var=‘lang is $LANG‘ 則echo $var 顯示 lang is $LANG
5、使用轉義字符將特殊符號(回車,$,\,空格,‘等)變成一般字符
6、在變量中使用命令,需要用`命令`或$(命令),例如取得內核版本號
version=$(uname -r)
echo $version
2.6.xxxxxxxxx
7、變量內容相加(字符串相加),使用"$變量名"或${變量},例如:
PATH="$PATH":/home/bin
8、將變量轉為環境變量,使用export命令
export PATH
9、環境變量一般為全大寫字母,自定義變量使用小寫字母
10、取消變量命令unset,unset 變量名
變量由鍵盤輸入read
要讀取來自鍵盤輸入的變量,使用read指令
read [-pt] 變量名
-p: 後面接提示字符
-t: 後面接等待的秒數
例如:
read -p "please type your name" -t 10 yourname
變量類型的定義declare/typeset
declare
declare [-aixr] 變量名
-a: 將後面的變量名定義為數組array類型
-i: 將後面的變量名定義為整數數字integer類型
-x: 將後面的變量名定義為環境變量,功能同export
+x: 取消環境變量
-r: 將變量名定義為readonly類ing,不能更改不能unset
只讀屬性一旦確定,只能通過註銷再登陸來恢復該變量的類型
bash對變量類型的基本定義
變量類型默認為字符串,不明確指定類型就是字符串,1+2是字符串不會自動算成3
bash中的數值運算只能是整數,1/3結果是0
typeset
typeset [-aAfFgilrtux] [-p] name[=value]
說明不是很全,還是用declare吧
變量中數組array的使用
設定方法:
var[index]=content
例如:
var[1]="aaa"
var[2]="bbb"
var[3]="ccc"
echo "${var[1]},${var[2]},${var[3]}"
aaa,bbb,ccc
變量內容的刪除與替換
變量設定方式 | 說明 |
---|---|
${變量#關鍵詞} ${變量##關鍵詞} |
若變量內容從【頭】開始的數據符合關鍵詞,則將符合的最【短】數據刪除 若變量內容從【頭】開始的數據符合關鍵詞,則將符合的最【長】數據刪除 |
${變量%關鍵詞} ${變量%%關鍵詞} |
若變量內容【從後向前】的數據符合關鍵詞,則將符合的最【短】數據刪除 若變量內容【從後向前】的數據符合關鍵詞,則將符合的最【長】數據刪除 |
${變量/舊字符串/新字符串} ${變量//舊字符串/新字符串} |
若變量內容符合舊字符串則【第一個】舊字符串會被新字符串取代 若變量內容符合舊字符串則【全部的】舊字符串會被新字符串取代 |
變量內容的判斷與替換
變量設定方式 | str沒有設定null | str為空字符串"" | str已設定為非空字符串 |
---|---|---|---|
var=${str-expr} var=${str:-expr} |
var=expr var=expr |
var= var=expr |
var=$str var=$str |
var=${str+expr} | var= | var=expr | var=expr |
var=${str:+expr} | var= | var= | var=expr |
var=${str=expr} var=${str:=expr} |
str=expr var=expr str=expr var=expr |
str不變 var= str=expr var=expr |
str不變 var=$str str不變 var=$str |
var=${str?expr} | expr輸出至stderr | var= | var=$str |
var=${str:?expr} | expr輸出至stderr | expr輸出至stderr | var=$str |
我個人的理解是
-:變量中不包含後面字符串時
+:變量中包含後面字符串時
=:變量等於後面字符串時
?:輸出
:冒號:變量為空字符串時取不加冒號時相反的動作
Linux命令(6/28)——declare/typeset命令