declare は Bash の組み込みコマンド で、変数の作成・初期化や配列/連想配列の宣言、読み取り専用化、整数属性、環境変数へのエクスポートなどの属性付与を行います。
関数内でのスコープ指定(-g)や参照変数(-n)など、Bash特有の拡張も利用できます。
構文(Syntax)
declare [-aAfFgilnrtux] [-p] [名前[=値] ...]
# ksh 系のエイリアス: typeset
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
-a | 配列として宣言 | declare -a arr=(1 2 3) |
-A | 連想配列として宣言(bash 4+) | declare -A m=([key]=val) |
-i | 整数属性(代入時に算術評価) | declare -i n=1+2 |
-r | 読み取り専用にする | declare -r APP_ENV=prod |
-x | 環境変数としてエクスポート | declare -x PATH |
-g | 関数内から グローバル変数として宣言(bash 4.2+) | f(){ declare -g X=1; } |
-n | 参照(nameref) 変数にする(bash 4.3+) | declare -n ref=var |
-l | 代入時に 小文字化 | declare -l lower="HeLLo" |
-u | 代入時に 大文字化 | declare -u upper="hello" |
-t | trace 属性(デバッグ向け、PS4 展開等で使用) | declare -t x=1 |
-f | 関数を対象に一覧/属性操作 | declare -f |
-F | 関数名のみ一覧(本体は表示しない) | declare -F |
-p | 変数/配列の 宣言形式で表示 | declare -p var arr |
実行例
整数属性と算術評価(-i)
declare -i n=1+2
echo "$n"
出力例:
3
読み取り専用(-r)とエラー例
declare -r TOKEN="abc123"
TOKEN="xyz" # 変更を試みる
出力例:
bash: TOKEN: readonly variable
配列と連想配列の宣言(-a, -A)
declare -a nums=(10 20 30)
declare -A conf=([host]=localhost [port]=5432)
echo "${nums[1]} ${conf[host]}"
出力例:
20 localhost
参照変数(-n)で別名アクセス
var="original"
declare -n alias=var
alias="via alias"
echo "$var"
出力例:
via alias
大文字/小文字変換属性(-u, -l)
declare -u U="abc"; echo "$U" # ABC
declare -l L="HeLLo"; echo "$L" # hello
関数内からグローバルへ代入(-g)
foo(){ declare -g GLOBAL_VAR="set in func"; }
foo; echo "$GLOBAL_VAR"
出力例:
set in func
変数の宣言内容を表示(-p)
declare -p nums conf
出力例(例):
declare -a nums='([0]="10" [1]="20" [2]="30")'
declare -A conf='([host]="localhost" [port]="5432" )'
関連コマンド
typeset:declareの同義(互換エイリアス)。local: 関数内でローカル変数を定義。export: 環境変数のエクスポート。readonly: 読み取り専用変数の設定。
備考
- Bash専用の組み込みで、
/bin/sh(dashなど)には存在しません。移植性が必要なスクリプトでは使用に注意。 - 付与した属性は カレントシェル にのみ有効。サブシェルには引き継がれない場合があります(
-xは環境へ)。 - 連想配列(
-A)や-g/-nはバージョン要件あり(bash 4.x 以降)。bash --versionで確認を。
参考
- Bash リファレンス(Shell Variables / Bourne Shell Builtins / Bash Builtins): https://www.gnu.org/software/bash/manual/bash.html
help declare(Bash 内蔵ヘルプ)

コメント