Bash のビルトインコマンド “declare” の使い方紹介(その3:読み取り専用)
以下のエントリの続き。
- シェルスクリプトサンプルコードでよく見かける typeset や declare ってなに? | ゲンゾウ用ポストイット
- Bash のビルトインコマンド "declare" の使い方紹介(その1) | ゲンゾウ用ポストイット
- Bash のビルトインコマンド "declare" の使い方紹介(その2) | ゲンゾウ用ポストイット
今回は 変数に型以外の情報を付与する機能 について。
他の言語で言う public
とか final
の キーワード をイメージしてもらえばよいです。
別の表現をすると、以下の属性を付与する機能と言えますね。
- 変数のスコープ
- 変数の読み取り専用(書き込み禁止)
declare
コマンド以外でも設定できる内容であり、以下のキーワードとも絡めて話をしたいと思います。
readonly
export
local
検証環境
declare オプション(変数の利用を制限・開放するもの)
-r
オプション
読込専用な変数を定義。 値を代入 したりや unset をできなくなる。
Java や PHP で言うところの final
キーワードです。
変数の定義時にこちらのオプションを付与すると、定義時に代入した初期値は後から変更することはできない。
連想配列型 や 配列型 の変数にも -r
オプションは適用される?
連想配列 で試してみる。
配列 でも試してみる。
変数の再代入ができないだけではなく、 連想配列や配列に格納されている値も再代入不可能 です。
完全にイミュータブルであり、安心して使える変数となっています。
readonly
コマンド
declare
コマンドを使わずに変数を読み取り専用として定義する方法もある。
Bash のビルトインコマンドの readonly
コマンドを使う方法。
declare -r
と readonly
のそれぞれのコマンドで変数を定義し、 -p
オプションを使って確認してみます。
どちらも declare -r
コマンドを使って読み取り専用として定義された変数 となっていることがわかります。
それでは declare -r
と readonly
のそれぞれで定義された変数は全く同じ特性を持つのでしょうか?
関数の外で変数が定義された場合 は全く同じ特性となりますが、
関数の内で変数が定義された場合 にはスコープに違いが生じます。
※続きは次回。
ひとこと
まだまだ1エントリに割く時間がかかってる。
もっとサクサク情報公開していけたらいいのに。
ディスカッション
コメント一覧
まだ、コメントがありません