日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

Linux 命令之 declare -- 声明或显示 shell 变量

發(fā)布時(shí)間:2023/12/3 linux 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 命令之 declare -- 声明或显示 shell 变量 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、命令介紹
  • 二、命令格式
  • 三、命令選項(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)

選項(xiàng)說(shuō)明
-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ō)明:

  • 用 + 代替 - 會(huì)關(guān)閉指定選項(xiàng)。例如,- 可用來(lái)指定變量的屬性,+ 則是取消變量所設(shè)的屬性。
  • 帶有整數(shù)屬性的變量在賦值時(shí)將使用算術(shù)估值(見(jiàn) let 命令)。
  • 在函數(shù)中使用時(shí),declare 使 var 成為本地變量,和 local 命令一致。-g 選項(xiàng)抑制此行為。
  • 四、命令示例

    (一)聲明變量并賦值

    方式一: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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。