shell變數作用域

2021-08-21 07:24:21 字數 2201 閱讀 8093

**:

在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

結果:解析:指令碼變數v1的作用域從被定義的地方開始,到shell結束。呼叫函式ltx_func的地方在變數v1的作用域內,所以能夠訪問並修改變數v1。

(2)shell函式定義的變數預設是global的,其作用域從「函式被呼叫時執行變數定義的地方」開始,到shell結束或被顯示刪除處為止。函式定義的變數可以被顯示定義成local的,其作用域侷限於函式內。但請注意,函式的引數是local的。

此處跟js有點像,在js中,在乙個function裡面定義變數,如果加上var則是local的,shell中的local關鍵字就相當於js的var,js中如果不加var,直接定義則是全域性的,shell也是。

例2:函式定義的global變數

#!/bin/bash

#define the function ltx_func

ltx_func()

#define the variable v2

v2=200 

#call the function ltx_func

ltx_func

echo $v2

結果:解析:函式變數v2預設是global的,其作用域從「函式被呼叫時執行變數定義的地方」開始,到shell結束為止。注意,不是從定義函式的地方開始,而是從呼叫函式的地方開始。列印命令在變數v2的作用域內,所以能夠訪問變數v2。

例3:函式定義的local變數

#!/bin/bash

#define the function ltx_func

ltx_func()

#define the local variable v2

local v2=200 

#call the function ltx_func

ltx_func

echo $v2

結果:(空)

解析:函式變數v2顯示定義為local的,其作用域侷限於函式內。列印命令在函式外,不在變數v2的作用域內,所以能夠不能訪問變數v2。

例4:函式引數是local變數

#!/bin/bash

#define the function ltx_func

ltx_func()

echo "param 1: $1"

#call the function ltx_func

ltx_func 100

結果:  param 1: 100

解析:函式引數是local的,通過位置變數來訪問。列印命令輸出函式的第乙個引數。

(3)如果同名,shell函式定義的local變數會遮蔽指令碼定義的global變數。

例5:同名local變數遮蔽global變數

#!/bin/bash

#define the function ltx_func

ltx_func()

echo $v1

#define the local variable v1

local v1=200 

echo $v1

#define the global variable v1

v1=100 

#call the function ltx_func

ltx_func

echo $v1

結果:解析:global變數v1的作用域從被定義的地方開始,到shell結束。呼叫函式ltx_func的地方在變數v1的作用域內,所以能夠變數v1。函式又定義了同名的local變數v1,同名local變數遮蔽global變數,所以函式第二次列印訪問的是local變數。退出函式後再次列印v1,此時函式定義的local變數已經消失,訪問的是global變數。

Shell變數作用域

變數作用域就是變數的有效範圍,shell中變數作用域有三種 1.全域性變數 在當前shell中任何地方使用的變數。2.區域性變數 只能在函式內使用的變數。3.環境變數 可以在任何shell中使用的變數。在當前shell中任何地方都能使用,不同shell中的全域性變數互不影響,在shell中定義的變數...

Shell中指令碼變數的作用域

在shell中定義函式可以使 模組化,便於復用 不過指令碼本身的變數和函式 的變數的作用域問題可能令你費解,在這裡梳理一下這個問題。1 shell指令碼中定義的變數是global的,其作用域從被定義的地方開始,到shell結束或 被顯示刪除的地方為止。例1 指令碼變數的作用域 bin bash de...

作用域,變數作用域,作用域鏈知識

第2章 變數作用域 第3章 作用域鏈 預覽 1.全域性作用域 整個script標籤下 或者是單獨的js檔案 外部js 2.區域性作用域也叫 函式作用域 在函式內部就是區域性作用域 這個 的名字 變數 只在函式內部起作用和效果 3.不同作用域下,定義相同變數名是不衝突的。如果是在同一作用域宣告2個相同...