declare命令是bash的一個內建命令,它可以用來聲明shell變量,設置變量的屬性(declare variables and/or give them attributes)。該命令也可以寫作typeset。雖然人們很少使用這個命令,如果知道了它的一些用法,就會發現這個命令還是挺有用的。
格式:declare
格式:typeset
格式:declare -p
格式:typeset -p
顯示所有變量的值。
格式: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。
[root@web ~]#type -a declare
declare is a shell builtin
[root@web ~]#
[root@jfht ~]#type -a typeset
typeset is a shell builtin
[root@jfht ~]#
[root@web ~]#x=6/3
[root@web ~]#echo $x
6/3
[root@web ~]#declare -i x
[root@web ~]#echo $x
6/3
[root@web ~]#x=6/3
[root@web ~]#echo $x
2
如果變量被聲明成整數,可以把表達式直接賦值給它,bash會對它求值。
[root@jfht ~]#x=error
[root@jfht ~]#echo $x
0
如果變量被聲明成整數,把一個結果不是整數的表達式賦值給它時,就會變成0.
[root@jfht ~]#x=3.14
-bash: 3.14: syntax error: invalid arithmetic operator (error token is ".14")
如果變量被聲明成整數,把一個小數(浮點數)賦值給它時,也是不行的。因為bash并不內置對浮點數的支持。
[root@web ~]#
[root@jfht ~]#declare +i x
此命令的結果是取消變量x的整數類型屬性。
[root@jfht ~]#x=6/3
[root@jfht ~]#echo $x
6/3
因為變量x不是整型變量,所以不會自動對表達式求值??梢圆捎孟旅鎯蓚€方式。
[root@jfht ~]#x=$[6/3]
[root@jfht ~]#echo $x
2
[root@jfht ~]#x=$((6/3))
[root@jfht ~]#echo $x
2
[root@jfht ~]#
[root@jfht ~]#declare -r r
[root@jfht ~]#echo $r
[root@jfht ~]#r=xxx
-bash: r: readonly variable
[root@jfht ~]#declare -r r=xxx
-bash: declare: r: readonly variable
[root@jfht ~]#declare +r r
-bash: declare: r: readonly variable
[root@jfht ~]#
[root@jfht ~]#declare +r r
-bash: declare: r: readonly variable
[root@jfht ~]#
[root@jfht ~]#unset r
-bash: unset: r: cannot unset: readonly variable
[root@jfht ~]#
[root@jfht ~]#declare -a names
[root@jfht ~]#names=Jack
[root@jfht ~]#echo ${names[0]}
Jack
[root@jfht ~]#names[1]=Bone
[root@jfht ~]#echo ${names[1]}
Bone
[root@jfht ~]#echo ${names}
Jack
[root@jfht ~]#echo ${names[*]}
Jack Bone
[root@jfht ~]#echo ${#names}
4
直接引用names,相當于引用names[0]
[root@jfht ~]#echo ${#names[*]}
2
[root@jfht ~]#echo ${names[@]}
Jack Bone
[root@jfht ~]#echo ${#names[@]}
2
[root@jfht ~]#declare -p names
declare -a names='([0]="Jack" [1]="Bone")'
[root@jfht ~]#
[root@jfht ~]#declare -F
declare -f add_jar
declare -f add_jar2
declare -f add_jar3
[root@jfht ~]#declare -f
add_jar ()
{
[ -e $1 ] && CLASSPATH=$CLASSPATH:$1
}
add_jar2 ()
{
if [ -e $1 ]; then
CLASSPATH=$CLASSPATH:$1;
else
if [ -e $2 ]; then
CLASSPATH=$CLASSPATH:$2;
fi;
fi
}
add_jar3 ()
{
if [ -e $1 ]; then
CLASSPATH=$CLASSPATH:$1;
else
if [ -e $2 ]; then
CLASSPATH=$CLASSPATH:$2;
else
if [ -e $3 ]; then
CLASSPATH=$CLASSPATH:$3;
fi;
fi;
fi
}
[root@jfht ~]#declare -f add_jar
add_jar ()
{
[ -e $1 ] && CLASSPATH=$CLASSPATH:$1
}
[root@jfht ~]#declare -F add_jar
add_jar
[root@jfht ~]#declare -F add_
[root@jfht ~]#declare -F add_*
[root@jfht ~]#declare -F 'add_*'
[root@jfht ~]#
#!/bin/bash
#AUTHOR:AN
#DATE:2019-3-24
#Describe:Generate No-Repeat Random-Number
#Method:如生成3~7的隨機數,先生成0~4(7-3)的隨機數,再加上3(起始值)來修正
######################################################################
echo "產生不重復的隨機正整數!!!"
read -p "輸入隨機數范圍的起始值:" Start_Num
read -p "輸入隨機數范圍的結束值:" End_Num
#控制數組的長度,且用于RANDOM的被余數
Array_Length=$[End_Num-Start_Num+1]
#定義數組,用來存儲最終生成的隨機數
typeset RAND
#循環生成$Array_Length個隨機數
for ((i=0;i<$Array_Length;i++))
do
Rnum=$[RANDOM%$Array_Length+Start_Num]
#提取數組的長度
Length=${#RAND[@]}
#雙if語句思路:先給數組賦第一個值,然后拿后面生成的隨機數依次與數組的元素進行對比
#如果相同重新產生一個隨機數,如果不同則存入數組
if [ $Length -eq 0 ];then
RAND[$i]=$Rnum
else
for ((j=0;j<$Length;j++))
do
if [ $Rnum != ${RAND[$j]} ];then
continue
else
Rnum=$[RANDOM%$Array_Length+Start_Num]
j=-1
fi
done
RAND[$i]=$Rnum
fi
done
#輸出數組的值
for ((x=0;x<$Array_Length;x++))
do
echo ${RAND[$x]}
done
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
百事樂手機值得購買嗎?值得購買。百事手機不錯。是一款雙攝手機,背面配備了200萬1300萬像素雙攝像頭,可以拍出虛化效果更好的照片,前置800萬像素副攝像頭支持美顏拍攝。此外,這款手機不僅有3G和32G的標準版,還有6G 128G的驚艷版,大容量內存,如此大的面積在同品牌中并不多見。百事樂手機值得購買嗎?不值得。百事手機應該是名牌手機,功能不如華為手機。國產的華為手機無論是性能還是像素都很優秀。手...
北京五道口在哪個區 五道口屬于北京哪個區?三里屯五道口是啥? 北京市海淀區五道口位于北四環路,位于八所大學的中心區域。它是中國高等院校和高級知識分子的聚居地。清華大學位于這里,教育環境優越。北京市海淀區五道口是北京語言學院、清華大學、北京大學、地質大學、石油大學、科技大學、航天大學、電影學院、聯合大學、郵電大學、中國人民銀行研究生院等十多所大學的交匯處。韓國學生和許多來中國工作的商人住在這里 ...
安陽市車輛違章信息怎么查詢?目前有四種方式查詢違規行為。1.到本市各區縣交通分局大隊辦事大廳,通過觸摸查詢終端進行查詢。2.登錄北京市公安局公安交通管理局對外服務網站:通過互聯網查詢。3.撥打語音電話詢問。比如:16888122。4.通過寫短信查詢違規情況。(比如和用戶都是)車輛非現場違章:發送車牌號到011661223。司機記分:發送:檔案編號至:011661222。河南車輛違章查詢?可以直接登...