Shell中指令碼變數的作用域
轉自:http://www.2cto.com/os/201301/182260.html
在shell中定義函式可以使程式碼模組化,便於複用程式碼。不過指令碼本身的變數和函式的變數的作用域問題可能令你費解,在這裡梳理一下這個問題。 (1)Shell指令碼中定義的變數是global的,其作用域從被定義的地方開始,到shell結束或
被顯示刪除的地方為止。 例1:指令碼變數的作用域 #!/bin/bash #define the function ltx_func ltx_func() { echo $v1 #modify the variable v1 v1=200 } #define the variable v1 v1=100 #call the function ltx_func ltx_func echo $v1 結果: 100 200 解析:指令碼變數v1的作用域從被定義的地方開始,到shell結束。呼叫函式ltx_func的地方在變數v1的作用域內,所以能夠訪問並修改變數v1。 (2)Shell函式定義的變數預設是global的,其作用域從“函式被呼叫時執行變數定義的地方”開始,到shell結束或被顯示刪除處為止。函式定義的變數可以被顯示定義成local的,其作用域侷限於函式內。但請注意,函式的引數是local的。 此處跟js有點像,在js中,在一個function裡面定義變數,如果加上var則是local的,shell中的local關鍵字就相當於js的var,js中如果不加var,直接定義則是全域性的,shell也是。