1. 程式人生 > >Linux命令(6/28)——declare/typeset命令

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

參數 port AS pri net 第一個 In AC 方式

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沒有設定nullstr為空字符串""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命令