<span id="vexk9"><table id="vexk9"></table></span>

      declare

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

      語法

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

      主要用途

      選項

      -f 將操作或顯示限制為函數(shù)名及函數(shù)定義。
      -F 只顯示函數(shù)名(調(diào)試時附加行號和源文件)。
      -g 在shell函數(shù)中使用時創(chuàng)建全局變量;其他情況下忽略。
      -p 顯示每個名稱的屬性和值。
      
      *設(shè)置屬性的選項:
      -a 創(chuàng)建數(shù)組(如果支持)。
      -A 創(chuàng)建關(guān)聯(lián)數(shù)組(如果支持)。
      -i 增加整型屬性。
      +i 刪除整型屬性。
      -l 增加小寫屬性,變量的值將轉(zhuǎn)換為小寫。
      +l 刪除小寫屬性。
      -n 增加引用屬性(如果該選項存在)。
      +n 刪除引用屬性(如果該選項存在)。
      -r 增加只讀屬性。
      -t 增加追蹤屬性。
      +t 刪除追蹤屬性。
      -u 增加大寫屬性,變量的值將轉(zhuǎn)換為大寫。
      +u 刪除大寫屬性。
      -x 增加導出屬性。
      +x 刪除導出屬性。
      

      參數(shù)

      name(可選):變量名或函數(shù)名。
      value(可選):變量的值。
      

      返回值

      declare 返回true除非你提供了非法選項或賦值錯誤。具體導致異常的情況請查看討論章節(jié)的關(guān)于異常情況

      例子

      # 聲明變量,當然也歡迎您在這個網(wǎ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ù)變量屬性強制轉(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} ${b}"
      # 因此,我們?nèi)粘D_本中最常見的類似于'a=3'實際上是聲明并賦值了一個全局變量。
      # 在接下來的 **討論** 環(huán)節(jié)會延伸討論全局和局部變量問題。
      
      # 注意,不能使用 `+a` 或 `+A` 取消數(shù)組,也不能使用 `+r` 取消只讀屬性。
      
      # 定義只讀數(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ù)的定義,輸出很長。
      declare
      # 顯示所有變量的屬性和值。
      declare -p
      # 顯示所有全局變量的屬性和值。
      declare -g
      
      # 顯示全部函數(shù)名和函數(shù)定義。
      declare -f
      # 只顯示全部函數(shù)名。
      declare -F
      
      # 定義兩個函數(shù)。
      function func_a(){ echo $(date +"%F %T"); }
      function func_b(){ cd /; ls -lh --sort=time; }
      # 顯示一到多個函數(shù)名和函數(shù)定義。
      declare -f func_a func_b
      # 只顯示一到多個函數(shù)名,驗證某個名稱是否已經(jīng)定義為函數(shù)時有用。
      declare -F func_a func_b
      # 最好不要讓函數(shù)名和變量名相同。
      

      討論

      1. 全局和局部變量

        正如上面例子指出的情況,我們在日常編寫程序的時候需要了解這些概念,在這里 做個簡要地介紹,當然你也可以很方便的搜索到相關(guān)內(nèi)容。

        • 全局變量:在整個腳本執(zhí)行期間,只要沒有被刪除就一直存在
        • 局部變量:在函數(shù)內(nèi)定義,函數(shù)執(zhí)行后就被刪除。

        建議函數(shù)內(nèi)使用local命令,函數(shù)外使用declare命令。

        不要在腳本中定義過多的全局變量,那樣可能會被其他函數(shù)調(diào)用造成意料之外的后果,并且也不方便檢查出來。

        更不用說缺乏必要的注釋了 —— ZhuangZhu-74

        相關(guān)資料:

      2. 關(guān)于declare typeset export local readonly命令

        為什么declare能做到的事,還需要定義其他這些命令呢?

        因為這樣語句含義會更加明確,例如:

        • 設(shè)置導出屬性的變量時,export vardeclare -x var
        • 在函數(shù)內(nèi)聲明變量時,使用local
        • 聲明只讀變量,使用readonly

        typesetdeclare命令一樣。

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

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

      注意

      1. 該命令是bash內(nèi)建命令,相關(guān)的幫助信息請查看help命令。
      2. 導出屬性的相關(guān)介紹請查看'export'命令。
      3. 只讀屬性的相關(guān)介紹請查看'readonly'命令。
      4. 引用屬性的相關(guān)介紹請查看'unset'命令的例子部分。
      主站蜘蛛池模板: 亚洲a∨国产av综合av下载| 天天爱天天做色综合| 亚洲综合网站色欲色欲| 亚洲国产免费综合| 狠狠色丁香婷婷久久综合不卡| 色综合AV综合无码综合网站| 伊色综合久久之综合久久| 国产成人综合久久精品| 国产香蕉尹人综合在线| 亚洲精品国产第一综合99久久| 一本久道久久综合| 色综合久久天天影视网| 综合国产在线观看无码| 伊人久久大香线蕉综合网站| 久久综合久久久久| 久久本道久久综合伊人| 天天欲色成人综合网站| 亚洲国产日韩综合久久精品| 色久悠悠婷婷综合在线亚洲| 卡通动漫第一页综合专区| 婷婷综合激六月情网| 亚洲国产成人综合| 99久久婷婷国产综合亚洲| 久久综合香蕉国产蜜臀AV| 久久丝袜精品综合网站| 伊人婷婷综合缴情亚洲五月| 中文自拍日本综合| 国产成人综合美国十次| 久久综合给合久久狠狠狠97色69| 丁香婷婷色五月激情综合深爱| 伊人久久亚洲综合影院| 狠狠激情五月综合婷婷俺| 一本色道久久综合亚洲精品高清| 综合在线视频精品专区| 亚洲综合色自拍一区| 久久99国产综合精品| 一日本道伊人久久综合影| 思思91精品国产综合在线| 人人狠狠综合久久亚洲| 日日狠狠久久偷偷色综合免费 | 日日狠狠久久偷偷色综合96蜜桃|