Bashシェルスクリプトでは、関数の中に関数がかける
はじめに
GitHub 上のシェルスクリプトを見ていたときに面白そうな機能を見つけたので投稿しておきます。
検証環境
関数の中に関数がかける
スクリプトを見ながら確認してみましょう。
まずは関数を定義します。
定義した関数を呼び出してみます。
ここから、 func1
の定義を変更します。func1
の中で func2
という関数を定義し、さら呼び出してみます。
関数 func1
を実行した結果は以下のようになります。
関数の中で関数が定義でき、かつそれを呼び出せることがわかります。
関数の中で定義したサブ関数を関数の外で呼び出したどうなる?
関数 func2
を 関数 func1
の外から呼び出したらどうなるでしょうか?
普通に実行できました。
それでは関数内で関数を定義するメリットとはなんでしょうか?
関数で囲むことで変数のスコープを調整できる
先程のスクリプトを少し変更します。
関数 func1
の中で変数 x
を定義し、各所で参照しています。
実行結果は以下のようになります。
関数 func1
で定義した変数 x
は、 func1
、 func2
、 func3
のスコープ内では参照、変更できます。func1
関数のスコープ外では参照できません。
このように変数のスコープを絞り込みために利用することができそうです。
func3
だけは注意が必要です。直接呼び出した場合、変数 x
がグローバルに定義されてしまいます。
ひとこと
便利そうな便利じゃなさそうな。
サブ関数はメイン関数のスコープ内に押し込めてほしい。
ディスカッション
コメント一覧
まだ、コメントがありません