Bashのビルトインコマンド `declare` の使い方紹介(変数のlocalスコープ)
またまた、以下のエントリの続き。
- シェルスクリプトサンプルコードでよく見かける typeset や declare ってなに?
- Bash のビルトインコマンド "declare" の使い方紹介(その1)
- Bash のビルトインコマンド "declare" の使い方紹介(その2:大文字小文字の自動変換)
- Bash のビルトインコマンド "declare" の使い方紹介(その3:読み取り専用)
※だんだんシリーズみたいになってきました(笑)
今回は 前回 の続きで、Bash における変数のスコープ(参照可能な範囲)について。
検証環境
declare
コマンドで定義した変数は関数の中だけのいのち
読み取り専用の変数を定義するためには、declare -p
を使っても readonly
を使っても違いはなさそうというところまで確認しました。
Bash のビルトインコマンド "declare" の使い方紹介(その3) の終わりでも話したとおり、これは 関数の外部で変数が定義された場合 のみの話。
関数の内部で定義された変数の場合には事情が異なります。
関数の内部で定義された場合の両者の違いを見ていきましょう。
declare
で定義した変数は、関数の内部でしか参照できません。
local
コマンド
declare -r
と readonly
の関係と同じように、 declare
を使わずにローカルスコープの変数を定義することが可能です。 local
という Bash のビルトインコマンドを使います。
local
コマンドのみを使うことも可能だし、 readonly
コマンドのみを使うこともできます。local
コマンドと readonly
コマンドを組み合わせて使う場合には、順序が重要です。readonly
=> local
の順番で呼び出すことはできません。
local
コマンドは関数の内でしか使うことはできません。
呼び出し順序やら関数内部でしか使えないやらでややこしいので、 readonly
コマンドや local
コマンドを覚えるよりも、 declare
の使い方を覚えてしまったほうが良いと思います。
declare
コマンドを使って、予め関数の外で定義した変数は関数の中でどう見える?
これは問題なく参照できます。
declare
コマンドを使って、関数の中で定義した変数を外で使えるようにはできない?
あまりないケースだとは思うが、これもできます。
※続きは次回に。
ディスカッション
コメント一覧
まだ、コメントがありません