グループコマンド {} で関数を定義した場合、グローバル変数のように扱われる
shell-func-variable1.sh
VAL="A"
echo "1:${VAL}"
func()
{
VAL="B"
echo "2:${VAL}"
}
func
echo "3:${VAL}"
shell-func-variable-result1.sh
$ ./shell-func-variable1.sh
1:A
2:B
3:B
サブシェル () を使って関数を定義した場合、ローカル変数のように扱われる
shell-func-variable2.sh
VAL="A"
echo "1:${VAL}"
func()
(
VAL="B"
echo "2:${VAL}"
)
func
echo "3:${VAL}"
shell-func-variable-result2.sh
$ ./shell-func-variable1.sh
1:A
2:B
3:A
local コマンドを使って、ローカル変数をつかう。
shell-func-variable3.sh
VAL="A"
echo "1:${VAL}"
func()
{
local VAL="B"
echo "2:${VAL}"
}
func
echo "3:${VAL}"
shell-func-variable-result3.sh
$ ./shell-func-variable1.sh
1:A
2:B
3:A