您好,登錄后才能下訂單哦!
小編給大家分享一下Linux中declare命令怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
聲明變量,設(shè)置或顯示變量的值和屬性。
declare [-aAfFgilnrtux] [-p] [name[=value] ...]
顯示包含指定屬性的全部變量和值
顯示包含指定屬性的一到多個(gè)變量和值
顯示一到多個(gè)變量的屬性和值
顯示所有變量的屬性和值并顯示函數(shù)的定義
顯示所有變量的屬性和值
顯示所有全局變量的屬性和值
顯示全部函數(shù)名和函數(shù)定義
只顯示全部函數(shù)名
顯示一到多個(gè)函數(shù)名和函數(shù)定義
只顯示一到多個(gè)函數(shù)名
聲明全局變量(可選:賦值)
聲明變量(可選:賦值、屬性)
增加、刪除變量的屬性(可選:賦值)
-f 將操作或顯示限制為函數(shù)名及函數(shù)定義。 -F 只顯示函數(shù)名(調(diào)試時(shí)附加行號(hào)和源文件)。 -g 在shell函數(shù)中使用時(shí)創(chuàng)建全局變量;其他情況下忽略。 -p 顯示每個(gè)名稱的屬性和值。 *設(shè)置屬性的選項(xiàng): -a 創(chuàng)建數(shù)組(如果支持)。 -A 創(chuàng)建關(guān)聯(lián)數(shù)組(如果支持)。 -i 增加整型屬性。 +i 刪除整型屬性。 -l 增加小寫屬性,變量的值將轉(zhuǎn)換為小寫。 +l 刪除小寫屬性。 -n 增加引用屬性(如果該選項(xiàng)存在)。 +n 刪除引用屬性(如果該選項(xiàng)存在)。 -r 增加只讀屬性。 -t 增加追蹤屬性。 +t 刪除追蹤屬性。 -u 增加大寫屬性,變量的值將轉(zhuǎn)換為大寫。 +u 刪除大寫屬性。 -x 增加導(dǎo)出屬性。 +x 刪除導(dǎo)出屬性。
name(可選):變量名或函數(shù)名。 value(可選):變量的值。
declare 返回true除非你提供了非法選項(xiàng)或賦值錯(cuò)誤。具體導(dǎo)致異常的情況請(qǐng)查看討論章節(jié)的關(guān)于異常情況。
# 聲明變量,當(dāng)然也歡迎您在這個(gè)網(wǎng)站(感謝本項(xiàng)目發(fā)起人 @jaywcjlove)查詢linux命令。 declare reference_website='https://wangchujiang.com/linux-command/' # 顯示所有包含整型屬性的變量和值。 declare -i # 定義變量b并賦值為3,具有整型屬性。 declare -i b=5 # 顯示屬性,返回 declare -i b="5"。 declare -p b # 刪除整型屬性。 declare +i b # 顯示屬性,返回 declare -- b="5"。 declare -p b # 根據(jù)變量屬性強(qiáng)制轉(zhuǎn)換值的英文大小寫。 declare -u uc_var='abc' declare -l lc_var='ABC' # 顯示'ABC abc'; echo "${uc_var} ${lc_var}"
# 定義函數(shù)內(nèi)的全局變量 function test(){ declare -g a=3 # 或者 local -g b=3 # 或者 c=3 # 讓我們查看它們的屬性。 declare -p a b c } # 執(zhí)行函數(shù)。 test # 返回結(jié)果。 # declare -- a="3" # declare -- b="3" # declare -- c="3" # 定義函數(shù)外的全局變量 declare a=3 b=3 declare –p a b # 返回結(jié)果如下。 # declare -- a="3" # declare -- b="3" # 定義局部變量 function test2(){ local -i a=3 declare -i b=3 } test2 # 沒有該變量(已經(jīng)被銷毀了) echo "${a} $" # 因此,我們?nèi)粘D_本中最常見的類似于'a=3'實(shí)際上是聲明并賦值了一個(gè)全局變量。 # 在接下來的 **討論** 環(huán)節(jié)會(huì)延伸討論全局和局部變量問題。
# 注意,不能使用 `+a` 或 `+A` 取消數(shù)組,也不能使用 `+r` 取消只讀屬性。 # 定義只讀數(shù)組,設(shè)置屬性的同時(shí)定義賦值。 declare -ar season=('Spring' 'Summer' 'Autumn' 'Winter') # 或者這樣。 season=('Spring' 'Summer' 'Autumn' 'Winter') declare -ar season # 顯示所有數(shù)組。 declare -a # 定義關(guān)聯(lián)數(shù)組。 declare -A fruits=(['apple']='red' ['banana']='yellow') # 顯示所有關(guān)聯(lián)數(shù)組。 declare -A
# 顯示所有變量的屬性和值并顯示函數(shù)的定義,輸出很長(zhǎng)。 declare # 顯示所有變量的屬性和值。 declare -p # 顯示所有全局變量的屬性和值。 declare -g
# 顯示全部函數(shù)名和函數(shù)定義。 declare -f # 只顯示全部函數(shù)名。 declare -F # 定義兩個(gè)函數(shù)。 function func_a(){ echo $(date +"%F %T"); } function func_b(){ cd /; ls -lh --sort=time; } # 顯示一到多個(gè)函數(shù)名和函數(shù)定義。 declare -f func_a func_b # 只顯示一到多個(gè)函數(shù)名,驗(yàn)證某個(gè)名稱是否已經(jīng)定義為函數(shù)時(shí)有用。 declare -F func_a func_b # 最好不要讓函數(shù)名和變量名相同。
全局和局部變量
正如上面例子指出的情況,我們?cè)谌粘>帉懗绦虻臅r(shí)候需要了解這些概念,在這里 做個(gè)簡(jiǎn)要地介紹,當(dāng)然你也可以很方便的搜索到相關(guān)內(nèi)容。
建議函數(shù)內(nèi)使用local命令,函數(shù)外使用declare命令。
不要在腳本中定義過多的全局變量,那樣可能會(huì)被其他函數(shù)調(diào)用造成意料之外的后果,并且也不方便檢查出來。
更不用說缺乏必要的注釋了 —— ZhuangZhu-74
相關(guān)資料:
全局變量:在整個(gè)腳本執(zhí)行期間,只要沒有被刪除就一直存在。
局部變量:在函數(shù)內(nèi)定義,函數(shù)執(zhí)行后就被刪除。
關(guān)于declare typeset export local readonly命令
為什么declare能做到的事,還需要定義其他這些命令呢?
因?yàn)檫@樣語句含義會(huì)更加明確,例如:
typeset和declare命令一樣。
設(shè)置導(dǎo)出屬性的變量時(shí),export var和declare -x var。
在函數(shù)內(nèi)聲明變量時(shí),使用local。
聲明只讀變量,使用readonly。
關(guān)于異常情況
有多種原因?qū)е耫eclare失敗,關(guān)于這些情況可以參考
,或執(zhí)行 info bash 查看declare部分最后一大串a(chǎn)n attempt is開頭的句子。以上是“Linux中declare命令怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。