Linux 命令之 declare -- 声明或显示 shell 变量
文章目錄
- 一、命令介紹
- 二、命令格式
- 三、命令選項
- 四、命令示例
- (一)聲明變量并賦值
- (二)將變量設置為環境變量
- (三)將變量設置為只讀,不可修改
- (四)將變量聲明為整數并進行計算
- (五)顯示變量的屬性和值
- (六)顯示所有的變量
- (七)顯示所有的環境變量
- (八)聲明數組變量
- (九)顯示所有自定義函數的名稱
- (十)顯示所有自定義函數,包括名稱和函數體
- (十一)顯示指定函數的聲明定義內容
- (十二)聲明一個整數型的變量,并給變量賦值
一、命令介紹
declare 命令是 bash 的一個內建命令,它可以用來聲明 shell 變量、顯示 shell 變量的值以及設置 shell 變量的屬性。declare 聲明定義的變量僅能在當前 shell 環境中起作用,切換 shell 環境后將無效。
declare 的功能與 typeset 命令的功能是相同的,不過 typeset 已經被棄用了,建議使用 declare 代替。
二、命令格式
declare [-aAfFgilnrtux] [-p] [var[=val] ...]注:var 是變量名稱,val 是變量的值
三、命令選項
| -f | 顯示所有自定義函數,包括名稱和函數體 |
| -F | 顯示所有自定義函數名稱 |
| -g | 在 Shell 函數內部創建全局變量 |
| -p | 顯示指定變量的屬性和值,當使用此選項時,其他的選項將被忽略 |
| -a | 聲明數組變量 |
| -A | 聲明變量為關聯數組(支持索引下標為字符串) |
| -i | 聲明整數型變量。這樣變量后面就可以跟著算術表達式,表達式的結果只能是整數。如果表達式求值失敗或者不是整數,就設置為 0 |
| -l | 給變量賦值時轉為小寫 |
| -u | 給變量賦值時轉為大寫 |
| -n | 使變量 var 成為指向一個以其值為名稱的變量的引用 |
| -r | 將變量 var 聲明為只讀變量。只讀變量不允許修改,也不允許刪除。等價于 readonly name |
| -t | 使變量 var 帶有 trace(追蹤)屬性 |
| -x | 將變量 var 導出,作用與 export 一樣,將變量 var 設置成環境變量,這樣在隨后的腳本和程序中可以使用。等價于 export name[=value] |
特別說明:
四、命令示例
(一)聲明變量并賦值
方式一:declare var=value
[root@htlwk0001host ~]# declare sum=200+300 [root@htlwk0001host ~]# echo $sum 500注:shell 自動判斷表達式的數據類型,若都是整數型則計算結果,再賦值給變量,所以最后輸出結果 500
方式二:typeset var=value 等價于 declare var=value
方式三:var=value
[root@htlwk0001host ~]# sum=200+300 [root@htlwk0001host ~]# echo $sum 200+300注:此處并沒有像我們想像中那樣會得到結 500,而是 200+300,這是由于它是文字類型的變量屬性。
(二)將變量設置為環境變量
將變量 var 設置成環境變量,這樣在隨后的腳本和程序中可以使用。
方式一:
[root@htlwk0001host ~]# declare -x var [root@htlwk0001host ~]# declare -x var=value # 將變量 var 設置成環境變量,并賦值為 value方式二:
[root@htlwk0001host ~]# typeset -x var方式三:
[root@htlwk0001host ~]# export var(三)將變量設置為只讀,不可修改
[root@linux ~]# declare -r sum [root@linux ~]# sum=apple -bash: sum: readonly variable [root@linux ~]# unset sum -bash: unset: sum: cannot unset: readonly variable注:聲明為只讀變量之后,不能修改該變量的屬性,也不能修改變量的值,也不能刪除該變量,所以,在聲明變量的時候,應該慎用,避免有去無回。另外,你在命令行中敲 readonly,你會發現有很多只讀變量,當然這些變量也是不能修改或刪除的。
(四)將變量聲明為整數并進行計算
[root@linux ~]# declare -i m n ret # 將多個變量聲明為整數 [root@linux ~]# m=10 [root@linux ~]# n=30 [root@linux ~]# ret=$m+$n [root@linux ~]# echo $ret 40(五)顯示變量的屬性和值
其實就是現實變量的聲明定義語句,如下所示:
[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=()(七)顯示所有的環境變量
[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"(八)聲明數組變量
將變量 var 聲明為數組變量。但這沒有必要。所有變量都不必顯式定義就可以用作數組。事實上,在某種意義上,似乎所有變量都是數組,而且賦值給沒有下標的變量與賦值給"var[0]"相同。
[root@jfht ~]#declare -a names # 聲明一個數組變量叫names [root@jfht ~]#names=Jack # 給數組賦值,沒有具體指定下標,默認賦值給下標為0的位置,即等價于names[0]=Jack [root@jfht ~]#echo ${names[0]} # 輸出數組names下標為0的元素的值 Jack [root@jfht ~]#names[1]=Bone # 給數組names下標為1的位置賦值Bone [root@jfht ~]#echo ${names[1]} Bone [root@jfht ~]#echo ${names} # 沒有指定下標,輸出第一個元素的值。直接引用names,相當于引用names[0] Jack [root@jfht ~]#echo ${names[*]} # '*'代表數組所有的元素 Jack Bone [root@jfht ~]#echo ${#names} # 輸出數組第一個元素的長度 4 [root@jfht ~]#echo ${#names[*]} # 輸出數組的長度,即數組的元素個數 2 [root@jfht ~]#echo ${names[@]} # '@'與'*'類似 Jack Bone [root@jfht ~]#echo ${#names[@]} # 輸出數組的長度,即數組的元素個數 2 [root@jfht ~]#declare -p names # 查看變量的屬性和值,即變量names的聲明定義內容 declare -a names='([0]="Jack" [1]="Bone")' [root@jfht ~]#(九)顯示所有自定義函數的名稱
[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 ...(十)顯示所有自定義函數,包括名稱和函數體
[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 () ...(十一)顯示指定函數的聲明定義內容
[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 ~]#(十二)聲明一個整數型的變量,并給變量賦值
[root@htlwk0001host ~]# declare -i var [root@htlwk0001host ~]# var=6/3 [root@htlwk0001host ~]# declare -p var declare -i var="2" [root@htlwk0001host ~]# echo $var 2給整數型的變量賦予非整數型的值,結果變成0,如下所示:
[root@htlwk0001host ~]# var=error [root@htlwk0001host ~]# echo $var 0 [root@htlwk0001host ~]#如果變量被聲明成整數,把一個小數(浮點數)賦值給它時,也是不行的。因為bash并不內置對浮點數的支持,如下所示:
[root@htlwk0001host ~]# var=3.14 -bash: 3.14: syntax error: invalid arithmetic operator (error token is ".14")取消變量 var 的整數類型屬性,如下命令:
[root@htlwk0001host ~]# declare +i var [root@htlwk0001host ~]# var=6/3 [root@htlwk0001host ~]# echo $var 6/3因為變量 var 不是整型變量,所以不會自動對除法的表達式求值。可以采用下面兩個方式:
[root@htlwk0001host ~]# x=$[6/3] [root@htlwk0001host ~]# echo $x 2 [root@htlwk0001host ~]# x=$((6/3)) [root@htlwk0001host ~]# echo $x 2總結
以上是生活随笔為你收集整理的Linux 命令之 declare -- 声明或显示 shell 变量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑cpu风扇调到多少(cpu风扇设置多
- 下一篇: Linux 命令之 env -- 显示系