declare - 変数を宣言する

declare

declareコマンドはBash組み込みコマンドの一つになります。declareコマンドは変数を宣言するコマンドです。また、Bashの変数宣言はdeclareコマンドを使用しなくても行うことが出来ます。しかし、declareコマンドは変数に対して何かの制限等を与える場合に使用することが出来ます。

また、関数内でdeclareコマンドで宣言した変数のスコープは基本的にローカル変数として扱われます。

スポンサーリンク

declareコマンドの利用例

変数宣言と変数の確認
(オプションなし)

declareコマンドは変数宣言を行うコマンドになります。ただし、変数を使用する場合、declareコマンドを利用せずに変数名と値の代入を行うことでその変数を利用できます

コマンド例

または

実行結果

また、declareコマンドを引数なしで利用するとすべての変数(関数を含む)の値を確認できます。

コマンド例と実行結果

変数の確認
(-pオプション)

-pオプションを用いることで現在の変数名とその変数の属性を確認できます。引数がない場合はすべての変数名とその変数の属性を表示します。

コマンド例と実行結果

引数に変数名や他のオプションが存在する場合は変数名やオプションの条件に当てはまる変数に絞って確認できます。

コマンド例と実行結果

関数名の確認
(-Fオプション)

-Fオプションを用いることで関数名を確認できます。このオプションでは関数の定義が表示されないので、関数をさっと確認するのに便利です。

コマンド例と実行結果

グローバル変数宣言
(-gオプション)

declareコマンドを関数内で用いるとdeclareコマンドで宣言した変数はローカル変数として扱われます。ローカル変数はlocalコマンドでも宣言することができます。

-gオプションを用いるとグローバル変数として扱われ、関数のスコープの外にある変数にアクセスして代入できます。

script.sh

コマンド例と実行結果

配列宣言
(-aオプション)

-aオプションを用いると配列の宣言ができます。以下の例では空の配列は"declare -p -a"で表示されないため、grepコマンドを用いて、変数の確認を行っています。

コマンド例と実行結果

bashで配列を用いる場合、"()"を用いて、変数名=(値1 値2 ...)のように記述することで変数を配列として利用できます。さらに"()"と+=演算子を用いると配列の追加を行うこともできます。

コマンド例と実行結果

連想配列宣言
(-Aオプション)

-Aオプションを用いることで、連想配列を利用できます。連想配列は通常の配列と違い、インデックスとして文字列のような数値ではない値を用いることができます。

コマンド例と実行結果

関数を確認
(-fオプション)

-fオプションは関数を指定するときに使うオプションになります。-pオプションと組み合わせると関数の定義を確認できます。

コマンド例と実行結果

nameref属性の変数宣言
(-nオプション)

-nオプションを用いると別の変数を参照するnameref属性の変数を利用できます。nameref属性は変数名を利用します。

コマンド例と実行結果

このnameref属性の変数は関数で変数を渡したい場合に利用できます。

nameref.sh

コマンド例と実行結果

小文字変換の変数宣言
(-lオプション)

-lオプションを用いると変数の値が小文字に変換される変数を利用できます。

コマンド例と実行結果

大文字変換の変数宣言
(-uオプション)

-uオプションを用いると変数の値が大文字に変換される変数を利用できます。

コマンド例と実行結果

読み込み専用の変数宣言
(-rオプション)

-rオプションを用いると読み込み専用の変数を利用できます。

コマンド例と実行結果

読み込み専用の変数はスクリプト上では特に問題ありませんが、端末上で使用してしまった場合、Bashではunsetコマンド等を用いてもその変数を削除することができません。しかし、以下の記事のようにGDBを用いるとその変数を削除する方法もあります。

参考:Bash で readonly した変数を再度編集可能にする - Qiita

トレース属性を付与
(-tオプション)

-tオプションを用いるとトレース属性を付与できます。この属性は関数に利用でき、DEBUGやRETURNのトラップが関数に継承されます。

trace.sh

コマンド例と実行結果

環境変数の宣言
(-xオプション)

-xオプションを用いると環境変数として変数を利用できます。exportコマンドを用いても環境変数を利用することができます。

コマンド例と実行結果

属性をオフに

属性をオフにしたい場合は、オプションの'-'を'+'の記号を用いることでその属性をオフにできます。ただし、読み込み専用の属性は解除できません。

コマンド例と実行結果

参考

Bash Reference Manual: Bash Builtins

スポンサーリンク