■グローバル変数
shell内の変数について、特に指定しない場合は、そのshell全体で有効なグローバル変数となる。
グローバル変数は、関数内外にかかわらず、変更・参照することができる。
▼作成する処理概要
グローバル変数の確認として、関数外で動物の名前をセットし、関数内部で動物の名前を変更する処理を実装する。
・フローチャート
・プログラム仕様
▼メイン処理
入力 | 処理概要 | 出力 |
---|---|---|
– | 動物の名前(犬)をセットする。:グローバル変数 | – |
– | 動物の名前を出力する。 | 初期値:動物名 |
– | 動物の名前変更関数を呼び出す。 | – |
– | 動物の名前を出力する。 | 変更後:動物名 |
▼動物の名前変更関数
入力 | 処理概要 | 出力 |
---|---|---|
– | 区切りを出力する。 | 区切り文字(#) |
– | 動物の名前を出力する。 | 関数内の変更前:動物名 |
グローバル変数(動物の名前) | 動物の名前を猫に変更する。 | – |
– | 動物の名前を出力する。 | 関数内の変更後:動物名 |
– | 区切りを出力する。 | 区切り文字(#) |
・サンプルコード
#!/bin/bash
# 動物の名前変更関数
update_animals_v1()
{
echo "##########################"
echo "関数内の変更前:"$animal_name
# 動物の名前を変更(猫)
animal_name=cat
echo "関数内の変更後:"$animal_name
echo "##########################"
}
# 動物の名前をセット(犬):グローバル変数
animal_name=dog
echo "初期値:"$animal_name
update_animals_v1
echo "変更後:"$animal_name
・実行結果
初期値:dog
##########################
関数内の変更前:dog
関数内の変更後:cat
##########################
変更後:cat
関数内で変更した値(cat)が関数外でも反映している。
■ローカル変数
一般的に、グローバル変数は適応範囲が広すぎるため、誤作動(バグ)が生じる可能性が高い。
これを避けるために、ローカル変数を使用する。
ローカル変数とは、変数の適応範囲を関数内に限定した変数である。
ローカル変数を定義する場合は、変数宣言または変数に値を設定するとき、先頭に「 local 」をつける
# 変数宣言
local animal_name
# アタイを設定する
local animal_name=cat
▼作成する処理概要
ローカル変数の確認として、上記「■グローバル変数」と同様に、関数外で動物の名前をセットし、関数内部で動物の名前を変更する処理を実装する。
ただし、関数内の変数はローカル変数とする。
・フローチャート
・プログラム仕様
▼メイン処理
入力 | 処理概要 | 出力 |
---|---|---|
– | 動物の名前(犬)をセットする。:グローバル変数 | – |
– | 動物の名前を出力する。 | 初期値:動物名 |
– | 動物の名前変更関数を呼び出す。 | – |
– | 動物の名前を出力する。 | 変更後:動物名 |
▼動物の名前変更関数
入力 | 処理概要 | 出力 |
---|---|---|
– | 区切りを出力する。 | 区切り文字(#) |
– | 動物の名前を出力する。 | 関数内の変更前:動物名 |
– | 動物の名前を猫に変更する。:ローカル変数 | – |
– | 動物の名前を出力する。 | 関数内の変更後:動物名 |
– | 区切りを出力する。 | 区切り文字(#) |
・サンプルコード
#!/bin/bash
# 動物の名前変更関数
update_animals_v2()
{
echo "##########################"
echo "関数内の変更前:"$animal_name
# 動物の名前を変更(猫):ローカル変数
local animal_name=cat
echo "関数内の変更後:"$animal_name
echo "##########################"
}
# 動物の名前をセット(犬)
animal_name=dog
echo "初期値:"$animal_name
update_animals_v2
echo "変更後:"$animal_name
・実行結果
初期値:dog
##########################
関数内の変更前:dog
関数内の変更後:cat
##########################
変更後:dog
関数内で変更した値(cat)が関数外でも反映せず、関数外では、初期値で設定した値(dog)のままである。
コメント
[…] グローバル変数とローカル変数の有効範囲を確認 | え〜のう […]