コードは次のとおりです。
#!/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
。