linux bash shell之declare

來源:互聯網
上載者:User

declaretypeset內建命令(它們是完全相同的)可以用來限定變數的屬性.這是在某些程式設計語言中使用的定義類型不嚴格的方式。命令declare是bash版本2之後才有的。命令typeset也可以在ksh指令碼中運行。

declare/typeset 選項

-r  唯讀
   1 declare -r var1

(declare -r var1readonly var1作用相同)

這大致和C的const限定詞相同.一個試圖改變唯讀變數值的操作將會引起錯誤資訊而失敗.

-i  整數
   1 declare -i number   2 # 指令碼餘下的部分會把"number"當作整數看待.   3    4 number=3   5 echo "Number = $number"     # Number = 3   6    7 number=three   8 echo "Number = $number"     # Number = 0   9 # 指令碼嘗試把字串"three"作為整數來求值(譯者註:當然會失敗,所以出現值為0).

某些算術計算允許在被聲明為整數的變數中完成,而不需要特別使用expr或let來完成。

   1 n=6/3   2 echo "n = $n"       # n = 6/3   3    4 declare -i n   5 n=6/3   6 echo "n = $n"       # n = 2
-a  數組
   1 declare -a indices

變數indices會被當作數組.

-f  函數
   1 declare -f

在指令碼中沒有帶任何參數的declare -f 會列出所有在此指令碼前面已定義的函數出來。

   1 declare -f function_name

declare -f function_name則只會列出指定的函數.

-x export
   1 declare -x var3

這樣將聲明一個變數作為指令碼的環境變數而被匯出。

-x var=$value
   1 declare -x var3=373

declare命令允許在聲明變數類型的時候同時給變數賦值。

例子 9-21. 用declare來聲明變數類型

   1 #!/bin/bash   2    3 func1 ()   4 {   5 echo This is a function.   6 }   7    8 declare -f        # 列出上面的函數.   9   10 echo  11   12 declare -i var1   # var1是一個整數.  13 var1=2367  14 echo "var1 declared as $var1"  15 var1=var1+1       # 整數聲明後,不需要使用'let'.  16 echo "var1 incremented by 1 is $var1."  17 # 試圖將已聲明為整數的變數的值更改為浮點值.  18 echo "Attempting to change var1 to floating point value, 2367.1."  19 var1=2367.1       # 引起一個錯誤資訊,此變數的值保持原樣.  20 echo "var1 is still $var1"  21   22 echo  23   24 declare -r var2=13.36         # 'declare'允許設定變數的屬性,  25                               #+ 同時也給變數賦值.  26 echo "var2 declared as $var2" # 試圖更改唯讀變數的值.  27 var2=13.37                    # 引起錯誤,並且從指令碼退出.  28   29 echo "var2 is still $var2"    # 這行不會被執行.  30   31 exit 0                        # 指令碼不會從這兒退出.

使用內建的declare來限定變數的範圍.

   1 foo ()   2 {   3 FOO="bar"   4 }   5    6 bar ()   7 {   8 foo   9 echo $FOO  10 }  11   12 bar   # 列印 bar.

然而 . . .

   1 foo (){   2 declare FOO="bar"   3 }   4    5 bar ()   6 {   7 foo   8 echo $FOO   9 }  10   11 bar  # 什麼也不列印.  12   13   14 # 多謝Michael Iatrou指出這一點.
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.