【Shell】--- shell腳本中變量的類型及作用域


  一直對shell腳本有一種特殊的感覺,因此花了一段時間學習,本人擅長C語言編程,深受C語言荼毒,在學習其他任何類似於編程語言的東東的時候,都會不自覺的與C進行對比,因此對於shell中的變量的作用域一直有點疑問,在此總結一下:

  首先,腳本的變量聲明相比於C來說還是比較簡單好用的,跟python有的一拼,沒有那么復雜的用法,直接說明然后使用,無論是字符串還是數字都一樣。但是本着嚴謹的態度,對於變量的聲明和使用,還是希望有需要的時候聲明使用,不需要的時候,立馬舍棄丟掉,一刻不多留,這就需要了解shell中變量的作用域問題。

  1、全局變量

  在shell中,默認的變量作用域是全局類型的。

 1 #!/bin/bash
 2 
 3 declare -i tmp1=10
 4 
 5 function fun1(){
 6     echo $tmp1;
 7     tmp2=100;
 8 }
 9 
10 ###  START HERE  ###
11 fun1
12 
13 echo $tmp2

  直接上代碼,tmp1這種在函數體外文件內聲明的變量,毫無疑問屬於全局變量,其作用域應從定義的地方開始一直到腳本結束。而tmp2在這里也屬於gloabl變量,其作用域應在第一次調用fun1()函數的地方開始,到腳本結束。

  可得:在沒有任何限定說明的情況下,shell默認變量屬於全局類型

  2、局部變量

  以上述代碼為例,假設第7行tmp2=100,修改為declare -i tmp2=100,最終運行結果將不會輸出tmp2=100,說明函數體內采用declare修飾的變量屬於局部變量,作用域僅限於該函數體內部。

  local:顯式聲明某變量為局部變量,函數體內凡是帶有locall修飾的變量,均為局部。(注意:如果局部變量與全局變量同名,則局部會覆蓋全局變量)

  3、參數

  函數參數為局部類型,只能在當前函數內部使用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM