溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux中declare命令怎么用

發(fā)布時(shí)間:2022-01-21 11:10:51 來源:億速云 閱讀:272 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下Linux中declare命令怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Linux常用命令 declare命令用于聲明 shell 變量,declare為shell指令,在第一種語法中可用來聲明變量并設(shè)置變量的屬性([rix]即為變量的屬性),在第二種語法中可用來顯示shell函數(shù)。

Linux中declare命令怎么用

declare

聲明變量,設(shè)置或顯示變量的值和屬性。

語法

 declare [-aAfFgilnrtux] [-p] [name[=value] ...]

主要用途

  • 顯示包含指定屬性的全部變量和值

  • 顯示包含指定屬性的一到多個(gè)變量和值

  • 顯示一到多個(gè)變量的屬性和值

  • 顯示所有變量的屬性和值并顯示函數(shù)的定義

  • 顯示所有變量的屬性和值

  • 顯示所有全局變量的屬性和值

  • 顯示全部函數(shù)名和函數(shù)定義

  • 只顯示全部函數(shù)名

  • 顯示一到多個(gè)函數(shù)名和函數(shù)定義

  • 只顯示一到多個(gè)函數(shù)名

  • 聲明全局變量(可選:賦值)

  • 聲明變量(可選:賦值、屬性)

  • 增加、刪除變量的屬性(可選:賦值)

選項(xiàng)

 -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)出屬性。

參數(shù)

 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ù)名和變量名相同。

討論

  1. 全局和局部變量

    正如上面例子指出的情況,我們?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)資料:

    • google提供的編碼規(guī)范

    • 全局變量的討論


    • 全局變量:在整個(gè)腳本執(zhí)行期間,只要沒有被刪除就一直存在。

    • 局部變量:在函數(shù)內(nèi)定義,函數(shù)執(zhí)行后就被刪除。

  2. 關(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。

  3. 關(guān)于異常情況

    有多種原因?qū)е耫eclare失敗,關(guān)于這些情況可以參考bash在線文檔declare部分(最新版),或執(zhí)行 info bash 查看declare部分最后一大串a(chǎn)n attempt is開頭的句子。

以上是“Linux中declare命令怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(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)容。

AI