私はいくつかのオンラインチュートリアルを通してシェルスクリプトを学んでおり、グローバル変数とローカル変数の違いを宣言する次のスクリプトを得ました。
#!/bin/bash
# Experimenting with variable scope
var_change () {
local var1='local 1'
echo Inside function: var1 is $var1 : var2 is $var2
var1='changed again'
var2='changed again'
}
var1='global 1'
var2='global 2'
echo Before function call: var1 is $var1 : var2 is $var2
var_change
echo After function call: var1 is $var1 : var2 is $var2
出力は次のとおりです
関数呼び出し前:var1はグローバル1:var2はグローバル2
内部機能: var1ローカル1:var2はグローバル2
関数呼び出し後:var1はグローバル1:var2は再変更
私の質問...
var1
関数呼び出し後に「再変更」の代わりに「グローバル1」があるのはなぜですか?誰かがこれを説明できますか?
ベストアンサー1
var1
関数内でローカルに宣言されました。したがって、関数の実行中に次のようなものがあります。二つ変数名var1
:グローバル変数とローカル変数。ただし、関数はローカル関数のみを「見る」ことができます(ローカル関数はグローバル関数を「隠します」)。したがって、関数内で実行するすべての操作はローカルvar1
変数に対して実行され、グローバル変数はvar1
まったく触れません。