ここでの局地関数・ローカル関数とは「関数内部のみのスコープを持つ関数」のことを指します。
いい単語を知らなかったんです...
bashの関数内で、ローカルな関数を作成するには以下のようにします。
function outer() (
function inner() {
# 処理
}
)
この例では、outer
だけが関数として認識され、inner
は存在しないようになります。
簡単な話、関数の内部にてそのまま関数を定義するだけです。
しかし中々びっくりだった...
因みにポイントは外側の関数の処理を{}
ではなく()
で覆うことです。
関数定義の際、()
を使うとその関数の内部は子プロセスで実行されることになります。
すると内部で定義した関数のスコープはその子プロセスまでに限定されます。
そのおかげで外側の関数を抜ける際、内部で作成された関数はプロセスごと消えるため、外に漏れない=局地関数ができる、という仕組みになります。
因みに{}
としてしまうと、関数を一度実行すればinner
もグローバルに存在してしまうため注意が必要です。