誰かがこのシェルスクリプトのグローバル変数を説明するのに役立ちますか?

誰かがこのシェルスクリプトのグローバル変数を説明するのに役立ちますか?

コードは次のとおりです。

#!/bin/bash
var_change() {
 local var1='local 1'
 echo Inside function: var1 is $var1 : var2 is $var2
 var1='changed again'
 var2='2 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

上記スクリプトを実行したときの出力です。

Before function call: var1 is global 1 : var2 is global 2
Inside function: var1 is local 1 : var2 is global 2
After function call: var1 is global 1 : var2 is 2 changed again

最後の行であるAfter関数の呼び出しを見てください。ここでvar2が「2に戻りました」の理由はわかりません。私はvar_change関数の外でvar2変数がglobal2でなければならないと思います。

ベストアンサー1

関数にvar2宣言がないので、local「グローバル」です。つまり、関数末尾の値は関数呼び出し以降の値になります。

つまり、var1関数内部の変数は「ローカル」なので同じ変数ではありません。グローバル名を冠したものの一つとしてvar2

おすすめ記事