Linux命令(6/28)——declare/typeset命令


declare 與 typeset 命令是bash的內建命令,兩者是完全一樣的,用來聲明shell變量,設置變量的屬性。

 declare命令(別名typeset)屬shell內建命令,用於申明shell變量並設置變量屬性,或查看已定義的shell變量和函數。若不加上任何參數,則會顯示全部的shell變量與函數(與執行set指令的效果相同)。

常用命令參數

  1. -r 設置變量為只讀

  2. -i 設置變量為整數

  3. -a 設置變量為數組array

  4. -f 如果后面沒有參數的話會列出之前腳本定義的所有函數,如果有參數的話列出以參數命名的函數

  5. -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

 

我個人的理解是

-:變量中不包含后面字符串時

+:變量中包含后面字符串時

=:變量等於后面字符串時

?:輸出

:冒號:變量為空字符串時取不加冒號時相反的動作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM