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