bash変数スコープ
1254 ワード
bashには2つの役割ドメインがあります.1つはグローバル役割ドメイン、すなわちデフォルトで宣言された変数です.もう1つは、localキーワードで宣言されるローカル役割ドメインの変数です.
1)グローバル変数宣言には、次のような状況があります.
しかし,関数に宣言されるグローバル変数mnは,主関数が呼び出されないまでは可視ではない.
2)ローカル役割ドメイン,変数宣言時に前にlocalキーワードを追加し,関数にのみ適用できる役割ドメイン
現在の関数ブロックとそのサブ関数内にのみ表示されます.
ローカル変数の宣言と単一のコマンドラインに設定すると、操作の順序が変数を先に設定し、
次に変数の作用範囲を制限し、この結果を戻り値に反映します.
次のようになります.
1)グローバル変数宣言には、次のような状況があります.
#!/bin/bash
mm=12 #visible globally
func() {
mn=34 #visible globally
echo "mc=${mc}" #is visible
}
mc=35 #visible globally
# echo "mn={$mn}" #is not visible
func
echo "mm=${mm};mn=${mn};mc=${mc}"
しかし,関数に宣言されるグローバル変数mnは,主関数が呼び出されないまでは可視ではない.
2)ローカル役割ドメイン,変数宣言時に前にlocalキーワードを追加し,関数にのみ適用できる役割ドメイン
現在の関数ブロックとそのサブ関数内にのみ表示されます.
#!/bin/bash
func1() {
local loc1=11
echo "func1 loc1=${loc1}" #is visible
}
func2() {
echo "func2 loc1=${loc1}" #is visible
}
func1
echo "local loc1:${loc1}" #not visible
ローカル変数の宣言と単一のコマンドラインに設定すると、操作の順序が変数を先に設定し、
次に変数の作用範囲を制限し、この結果を戻り値に反映します.
次のようになります.
#!/bin/bash
t=$(exit 1)
echo $? # return 1
echo "t=${t}"
func() {
t1=$(exit 1)
echo $? # return 1
echo "t1=${t1}"
local t2=$(exit 1)
echo $? # return 0
echo "t2=${t2}"
local t3
t3=$(exit 1)
echo $? # return 1
echo "t3=${t3}"
}
func()