本篇文章會著重討論關於shell變數的一些細節要點,例如shell變數的型別是什麼,定義shell變數的幾種方式以及它們的區別等,加深大家對shell變數的理解,以及在各個場景下如何靈活運用變數。
let』s get started.
在shell中,給變數賦予的值都被視為字串型別。
定義shell變數的三種方式:
name=tom
name='tom'
name="tom"
注意:"=" 兩邊不能有空格。對於第一種方式,賦予的值不能含有空格,如果包含空格,必須用引號。例如:
#以下定義是錯誤的:
name=tom w
那麼單引號和雙引號有什麼區別呢?
對於普通的字串,用單引號和雙引號效果是一樣的,但如果賦予的值中包含了變數,希望最終能將變數的值包含在當前的賦予值中,則必須用雙引號。舉個例子:
name=tony
hello="hello, $"
echo $
如果希望獲得$的值tony, 則必須用雙引號:
hello, tony
如果用單引號,就會變成以下結果:
hello,$
全域性變數:在當前shell程序中可以被使用的變數。
區域性變數:僅能在函式內部使用的變數。
環境變數:在當前shell程序以及shell子程序中都能使用的變數。
說明:1 關於全域性變數,shell 中預設定義的變數都是全域性變數,即使變數定義在函式中,也是全域性變數。
2 區域性變數必須用關鍵字local進行宣告。
例子:
function a()
這裡申明了乙個函式,函式內部定義了兩個變數a,b。其中,a是全域性變數,b是區域性變數。
3 環境變數要通過export關鍵字進行宣告,這樣在子shell程序中也可以引用。但要注意,這種環境變數是傳子不傳父的。如果在shell子程序定義乙個變數並通過export 宣告為環境變數,那麼該程序的父程序是無法獲得這個變數的。
格式:readonly variablename
例子:
name=tony
readonly name
name=alice
test1.sh: line 3: name: readonly variable
兩種方式(直接通過**說明):
#方法1
a=`cat test.txt`
#方法2
b=$(cat test.txt)
兩種方式都可以獲取命令結果並賦值給變數。它們的區別在於:
方法1是無法做巢狀的,但方法2是可以的。
舉個例子:
正確:
path=$(cd $(dirname $0);pwd)
echo $
錯誤:
path=`cd `dirname $0`;pwd`
echo $
希望對大家有所幫助。
tony
linux環境變數知多少
linux環境變數 實際上就是使用者執行環境的引數集合。linux 是乙個多使用者的作業系統。而且在每個使用者登入系統後,都會有乙個專有的執行環境。通常每個使用者預設的環境都是相同的,而這個預設環境實際上就是一組環境變數的定義。使用者可以對自己的執行環境進行定製,其方法就是修改相應的系統環境變數 常...
閘道器知多少
閘道器 gateway 顧名思義,就是乙個網路到另乙個網路的關口。維基百科對閘道器的定義為 在計算機網路中,閘道器 gateway 是 其他伺服器通訊資料的伺服器,接收從客戶端傳送來的請求時,它就像自己擁有資源的源伺服器一樣對請求進行處理。但是,很多時候,我們會將路由器和閘道器認為是同乙個概念。其實...
原型知多少
除了undefind,number,string,boolean是簡單的值型別,其他的null,object,function都是物件 函式有prototype屬性,它是物件,是函式屬性和方法的集合 每個物件都有乙個 proto 屬性 隱式原型 它指向建立這個物件的函式的原型 函式也是一種物件 ob...