Linux 命令之 declare -- 声明或显示 shell 变量
文章目錄
- 一、命令介紹
- 二、命令格式
- 三、命令選項(xiàng)
- 四、命令示例
- (一)聲明變量并賦值
- (二)將變量設(shè)置為環(huán)境變量
- (三)將變量設(shè)置為只讀,不可修改
- (四)將變量聲明為整數(shù)并進(jìn)行計(jì)算
- (五)顯示變量的屬性和值
- (六)顯示所有的變量
- (七)顯示所有的環(huán)境變量
- (八)聲明數(shù)組變量
- (九)顯示所有自定義函數(shù)的名稱
- (十)顯示所有自定義函數(shù),包括名稱和函數(shù)體
- (十一)顯示指定函數(shù)的聲明定義內(nèi)容
- (十二)聲明一個(gè)整數(shù)型的變量,并給變量賦值
一、命令介紹
declare 命令是 bash 的一個(gè)內(nèi)建命令,它可以用來(lái)聲明 shell 變量、顯示 shell 變量的值以及設(shè)置 shell 變量的屬性。declare 聲明定義的變量?jī)H能在當(dāng)前 shell 環(huán)境中起作用,切換 shell 環(huán)境后將無(wú)效。
declare 的功能與 typeset 命令的功能是相同的,不過(guò) typeset 已經(jīng)被棄用了,建議使用 declare 代替。
二、命令格式
declare [-aAfFgilnrtux] [-p] [var[=val] ...]注:var 是變量名稱,val 是變量的值
三、命令選項(xiàng)
| -f | 顯示所有自定義函數(shù),包括名稱和函數(shù)體 |
| -F | 顯示所有自定義函數(shù)名稱 |
| -g | 在 Shell 函數(shù)內(nèi)部創(chuàng)建全局變量 |
| -p | 顯示指定變量的屬性和值,當(dāng)使用此選項(xiàng)時(shí),其他的選項(xiàng)將被忽略 |
| -a | 聲明數(shù)組變量 |
| -A | 聲明變量為關(guān)聯(lián)數(shù)組(支持索引下標(biāo)為字符串) |
| -i | 聲明整數(shù)型變量。這樣變量后面就可以跟著算術(shù)表達(dá)式,表達(dá)式的結(jié)果只能是整數(shù)。如果表達(dá)式求值失敗或者不是整數(shù),就設(shè)置為 0 |
| -l | 給變量賦值時(shí)轉(zhuǎn)為小寫(xiě) |
| -u | 給變量賦值時(shí)轉(zhuǎn)為大寫(xiě) |
| -n | 使變量 var 成為指向一個(gè)以其值為名稱的變量的引用 |
| -r | 將變量 var 聲明為只讀變量。只讀變量不允許修改,也不允許刪除。等價(jià)于 readonly name |
| -t | 使變量 var 帶有 trace(追蹤)屬性 |
| -x | 將變量 var 導(dǎo)出,作用與 export 一樣,將變量 var 設(shè)置成環(huán)境變量,這樣在隨后的腳本和程序中可以使用。等價(jià)于 export name[=value] |
特別說(shuō)明:
四、命令示例
(一)聲明變量并賦值
方式一:declare var=value
[root@htlwk0001host ~]# declare sum=200+300 [root@htlwk0001host ~]# echo $sum 500注:shell 自動(dòng)判斷表達(dá)式的數(shù)據(jù)類型,若都是整數(shù)型則計(jì)算結(jié)果,再賦值給變量,所以最后輸出結(jié)果 500
方式二:typeset var=value 等價(jià)于 declare var=value
方式三:var=value
[root@htlwk0001host ~]# sum=200+300 [root@htlwk0001host ~]# echo $sum 200+300注:此處并沒(méi)有像我們想像中那樣會(huì)得到結(jié) 500,而是 200+300,這是由于它是文字類型的變量屬性。
(二)將變量設(shè)置為環(huán)境變量
將變量 var 設(shè)置成環(huán)境變量,這樣在隨后的腳本和程序中可以使用。
方式一:
[root@htlwk0001host ~]# declare -x var [root@htlwk0001host ~]# declare -x var=value # 將變量 var 設(shè)置成環(huán)境變量,并賦值為 value方式二:
[root@htlwk0001host ~]# typeset -x var方式三:
[root@htlwk0001host ~]# export var(三)將變量設(shè)置為只讀,不可修改
[root@linux ~]# declare -r sum [root@linux ~]# sum=apple -bash: sum: readonly variable [root@linux ~]# unset sum -bash: unset: sum: cannot unset: readonly variable注:聲明為只讀變量之后,不能修改該變量的屬性,也不能修改變量的值,也不能刪除該變量,所以,在聲明變量的時(shí)候,應(yīng)該慎用,避免有去無(wú)回。另外,你在命令行中敲 readonly,你會(huì)發(fā)現(xiàn)有很多只讀變量,當(dāng)然這些變量也是不能修改或刪除的。
(四)將變量聲明為整數(shù)并進(jìn)行計(jì)算
[root@linux ~]# declare -i m n ret # 將多個(gè)變量聲明為整數(shù) [root@linux ~]# m=10 [root@linux ~]# n=30 [root@linux ~]# ret=$m+$n [root@linux ~]# echo $ret 40(五)顯示變量的屬性和值
其實(shí)就是現(xiàn)實(shí)變量的聲明定義語(yǔ)句,如下所示:
[c.biancheng.net]$ declare -r n=10 [c.biancheng.net]$ declare -p n declare -r n="10"(六)顯示所有的變量
[root@htlwk0001host ~]# declare -p declare -- BASH="/bin/bash" declare -r BASHOPTS="checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath" declare -ir BASHPID declare -- BASHRCSOURCED="Y" declare -A BASH_ALIASES=() declare -a BASH_ARGC=() declare -a BASH_ARGV=() declare -A BASH_CMDS=()(七)顯示所有的環(huán)境變量
[root@htlwk0001host ~]# declare -x declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/0/bus" declare -x HISTCONTROL="ignoredups" declare -x HISTSIZE="1000" declare -x HOME="/root" declare -x HOSTNAME="htlwk0001host" declare -x JAVA_HOME="/usr/java/latest"(八)聲明數(shù)組變量
將變量 var 聲明為數(shù)組變量。但這沒(méi)有必要。所有變量都不必顯式定義就可以用作數(shù)組。事實(shí)上,在某種意義上,似乎所有變量都是數(shù)組,而且賦值給沒(méi)有下標(biāo)的變量與賦值給"var[0]"相同。
[root@jfht ~]#declare -a names # 聲明一個(gè)數(shù)組變量叫names [root@jfht ~]#names=Jack # 給數(shù)組賦值,沒(méi)有具體指定下標(biāo),默認(rèn)賦值給下標(biāo)為0的位置,即等價(jià)于names[0]=Jack [root@jfht ~]#echo ${names[0]} # 輸出數(shù)組names下標(biāo)為0的元素的值 Jack [root@jfht ~]#names[1]=Bone # 給數(shù)組names下標(biāo)為1的位置賦值Bone [root@jfht ~]#echo ${names[1]} Bone [root@jfht ~]#echo ${names} # 沒(méi)有指定下標(biāo),輸出第一個(gè)元素的值。直接引用names,相當(dāng)于引用names[0] Jack [root@jfht ~]#echo ${names[*]} # '*'代表數(shù)組所有的元素 Jack Bone [root@jfht ~]#echo ${#names} # 輸出數(shù)組第一個(gè)元素的長(zhǎng)度 4 [root@jfht ~]#echo ${#names[*]} # 輸出數(shù)組的長(zhǎng)度,即數(shù)組的元素個(gè)數(shù) 2 [root@jfht ~]#echo ${names[@]} # '@'與'*'類似 Jack Bone [root@jfht ~]#echo ${#names[@]} # 輸出數(shù)組的長(zhǎng)度,即數(shù)組的元素個(gè)數(shù) 2 [root@jfht ~]#declare -p names # 查看變量的屬性和值,即變量names的聲明定義內(nèi)容 declare -a names='([0]="Jack" [1]="Bone")' [root@jfht ~]#(九)顯示所有自定義函數(shù)的名稱
[root@htlwk0001host ~]# declare -F declare -f __expand_tilde_by_ref declare -f __get_cword_at_cursor_by_ref declare -f __load_completion declare -f __ltrim_colon_completions declare -f __parse_options declare -f __parse_vdo_options ...(十)顯示所有自定義函數(shù),包括名稱和函數(shù)體
[root@htlwk0001host ~]# declare -f __expand_tilde_by_ref () { if [[ ${!1} == \~* ]]; thenif [[ ${!1} == */* ]]; theneval $1="${!1/%\/*}"/'${!1#*/}';elseeval $1="${!1}";fi;fi } __get_cword_at_cursor_by_ref () ...(十一)顯示指定函數(shù)的聲明定義內(nèi)容
[root@htlwk0001host ~]# declare -f __expand_tilde_by_ref __expand_tilde_by_ref () { if [[ ${!1} == \~* ]]; thenif [[ ${!1} == */* ]]; theneval $1="${!1/%\/*}"/'${!1#*/}';elseeval $1="${!1}";fi;fi } [root@htlwk0001host ~]#(十二)聲明一個(gè)整數(shù)型的變量,并給變量賦值
[root@htlwk0001host ~]# declare -i var [root@htlwk0001host ~]# var=6/3 [root@htlwk0001host ~]# declare -p var declare -i var="2" [root@htlwk0001host ~]# echo $var 2給整數(shù)型的變量賦予非整數(shù)型的值,結(jié)果變成0,如下所示:
[root@htlwk0001host ~]# var=error [root@htlwk0001host ~]# echo $var 0 [root@htlwk0001host ~]#如果變量被聲明成整數(shù),把一個(gè)小數(shù)(浮點(diǎn)數(shù))賦值給它時(shí),也是不行的。因?yàn)閎ash并不內(nèi)置對(duì)浮點(diǎn)數(shù)的支持,如下所示:
[root@htlwk0001host ~]# var=3.14 -bash: 3.14: syntax error: invalid arithmetic operator (error token is ".14")取消變量 var 的整數(shù)類型屬性,如下命令:
[root@htlwk0001host ~]# declare +i var [root@htlwk0001host ~]# var=6/3 [root@htlwk0001host ~]# echo $var 6/3因?yàn)樽兞?var 不是整型變量,所以不會(huì)自動(dòng)對(duì)除法的表達(dá)式求值。可以采用下面兩個(gè)方式:
[root@htlwk0001host ~]# x=$[6/3] [root@htlwk0001host ~]# echo $x 2 [root@htlwk0001host ~]# x=$((6/3)) [root@htlwk0001host ~]# echo $x 2總結(jié)
以上是生活随笔為你收集整理的Linux 命令之 declare -- 声明或显示 shell 变量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电脑cpu风扇调到多少(cpu风扇设置多
- 下一篇: Linux 命令之 env -- 显示系