declare – 変数の宣言と属性付与を行う(Bash組み込み)

環境変数

declareBash の組み込みコマンド で、変数の作成・初期化や配列/連想配列の宣言、読み取り専用化、整数属性、環境変数へのエクスポートなどの属性付与を行います。
関数内でのスコープ指定(-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"
-ttrace 属性(デバッグ向け、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/shdash など)には存在しません。移植性が必要なスクリプトでは使用に注意。
  • 付与した属性は カレントシェル にのみ有効。サブシェルには引き継がれない場合があります(-x は環境へ)。
  • 連想配列(-A)や -g/-n はバージョン要件あり(bash 4.x 以降)。bash --version で確認を。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント