はじめに#
こんにちは!今回はdeclareコマンドについて解説します。
declareは、シェル変数に型や属性を設定できるコマンドです。普通の変数より高度なことができるので、シェルスクリプトを書く時に知ってると便利です。
declareコマンドとは#
declareは、変数の属性を指定して宣言するための組み込みコマンドです。
普通に変数を作ると文字列として扱われますが、declareを使うと整数型にしたり、読み取り専用にしたり、配列にしたりできます。ちょっと高度な変数管理ができるわけです。
基本構文#
主なオプション#
| オプション |
説明 |
-i |
整数型として宣言 |
-r |
読み取り専用(定数)として宣言 |
-a |
配列として宣言 |
-A |
連想配列として宣言 |
-x |
環境変数として宣言(exportと同じ) |
-p |
変数の属性と値を表示 |
-l |
小文字に変換 |
-u |
大文字に変換 |
使用例#
例1: 整数型変数を宣言#
1
2
|
declare -i num=10
echo $num
|
実行結果:
整数型として宣言すると、算術演算が自動で行われます。
1
2
3
|
declare -i num=10
num=num+5
echo $num
|
実行結果:
普通の変数だとnum=num+5は文字列になりますが、整数型なら計算してくれます。
例2: 読み取り専用変数(定数)を宣言#
1
2
3
|
declare -r PI=3.14159
echo $PI
PI=3.14 # エラーになる
|
実行結果:
1
2
|
3.14159
bash: PI: 読み取り専用変数です
|
一度設定したら変更できない定数を作れます。
例3: 配列を宣言#
1
2
3
4
|
declare -a fruits=("apple" "banana" "orange")
echo ${fruits[0]}
echo ${fruits[1]}
echo ${fruits[@]} # すべての要素
|
実行結果:
1
2
3
|
apple
banana
apple banana orange
|
配列を使うと複数の値を1つの変数で管理できます。
例4: 連想配列を宣言#
1
2
3
4
5
6
7
|
declare -A user
user[name]="Taro"
user[age]=25
user[city]="Tokyo"
echo ${user[name]}
echo ${user[age]}
|
実行結果:
連想配列は、インデックスの代わりに任意の文字列をキーとして使えます。便利です。
例5: 環境変数として宣言#
1
2
|
declare -x MY_VAR="hello"
# exportと同じ効果
|
子プロセスでも使える環境変数になります。
例6: 変数の属性を確認#
1
2
3
4
|
declare -i num=10
declare -r PI=3.14
declare -p num
declare -p PI
|
実行結果:
1
2
|
declare -i num="10"
declare -r PI="3.14"
|
-pオプションで、変数にどんな属性が付いてるか確認できます。
例7: 大文字・小文字変換#
1
2
3
4
5
|
declare -u upper="hello"
echo $upper
declare -l lower="WORLD"
echo $lower
|
実行結果:
-uで大文字に、-lで小文字に自動変換されます。
例8: すべての変数を表示#
現在宣言されているすべての変数とその値が表示されます。結構な量が出るので注意。
配列の操作#
配列の基本操作#
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 配列の宣言と初期化
declare -a colors=("red" "green" "blue")
# 要素の追加
colors+=("yellow")
# 要素の参照
echo ${colors[0]} # 最初の要素
echo ${colors[@]} # すべての要素
echo ${#colors[@]} # 要素数
# 要素の削除
unset colors[1] # インデックス1の要素を削除
|
実行結果:
1
2
3
|
red
red green blue yellow
4
|
連想配列の操作#
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 連想配列の宣言
declare -A config
# 値の設定
config[host]="localhost"
config[port]=8080
config[debug]="true"
# キーの一覧
echo ${!config[@]}
# 値の一覧
echo ${config[@]}
|
実行結果:
1
2
|
host port debug
localhost 8080 true
|
Tips・注意点#
-
整数型の利点: 自動的に算術演算が行われる
1
2
|
declare -i x=10
x=x+5 # $や(())が不要
|
-
読み取り専用は変更不可: 一度設定したら絶対に変更できない
1
2
|
declare -r MAX=100
MAX=200 # エラー!
|
-
配列のインデックスは0始まり: 最初の要素は[0]
1
2
|
declare -a arr=("a" "b" "c")
echo ${arr[0]} # a
|
-
連想配列はBash 4.0以降: 古いBashでは使えないので注意
1
2
|
# バージョン確認
bash --version
|
-
ローカル変数との組み合わせ: 関数内で使うとローカル変数になる
1
2
3
4
|
function test() {
local -i num=10
# 関数の中だけで有効
}
|
-
属性の解除: +を使うと属性を外せる
1
2
|
declare -i num=10
declare +i num # 整数型を解除
|
実践的な使い方#
設定ファイルのような使い方#
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/bash
# 設定を連想配列で管理
declare -A config
config[app_name]="MyApp"
config[version]="1.0.0"
config[debug]="false"
config[max_connections]=100
echo "アプリ名: ${config[app_name]}"
echo "バージョン: ${config[version]}"
echo "デバッグモード: ${config[debug]}"
|
設定値を連想配列で管理すると、わかりやすくて便利です。
カウンター変数#
1
2
3
4
5
6
7
8
9
10
|
#!/bin/bash
declare -i count=0
for file in *.txt; do
count=count+1
echo "処理中: $file"
done
echo "合計 $count ファイル処理しました"
|
整数型にしておくと、計算が楽です。
定数の定義#
1
2
3
4
5
6
7
8
|
#!/bin/bash
# 定数を定義
declare -r APP_NAME="MyApplication"
declare -r VERSION="1.0.0"
declare -r MAX_RETRY=3
echo "起動中: $APP_NAME v$VERSION"
|
変更されたくない値は読み取り専用にしておきます。
エラーコードの管理#
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/bin/bash
# エラーコードを連想配列で管理
declare -A ERROR_CODES
ERROR_CODES[SUCCESS]=0
ERROR_CODES[FILE_NOT_FOUND]=1
ERROR_CODES[PERMISSION_DENIED]=2
ERROR_CODES[NETWORK_ERROR]=3
if [ ! -f "$file" ]; then
echo "Error: ファイルが見つかりません"
exit ${ERROR_CODES[FILE_NOT_FOUND]}
fi
|
エラーコードに名前を付けると、わかりやすいスクリプトになります。
ユーザー入力の検証#
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/bash
declare -i age
read -p "年齢を入力してください: " age
if [ $age -lt 0 ] || [ $age -gt 150 ]; then
echo "Error: 有効な年齢を入力してください"
exit 1
fi
echo "あなたは ${age}歳 です"
|
整数型にしておくと、数値の検証がやりやすいです。
複数の変数を一度に宣言#
1
2
3
4
5
6
7
8
9
|
#!/bin/bash
# 関連する変数をまとめて宣言
declare -r DB_HOST="localhost"
declare -r DB_PORT=5432
declare -r DB_NAME="mydb"
declare -r DB_USER="admin"
echo "データベース接続: ${DB_HOST}:${DB_PORT}/${DB_NAME}"
|
typeset との違い#
実はtypesetというコマンドもあって、declareとほぼ同じです。
1
2
3
|
# これらは同じ
declare -i num=10
typeset -i num=10
|
declareの方が一般的なので、基本的にはdeclareを使えばOKです。
まとめ#
今回はdeclareコマンドについて解説しました。
ポイント:
declareで変数に型や属性を設定できる
-iで整数型、-rで読み取り専用、-aで配列
-Aで連想配列(キーと値のペア)が使える
-pで変数の属性を確認できる
- シェルスクリプトで高度な変数管理が可能
普通の変数より高機能なので、シェルスクリプトを書く時に活用してください。特に配列と連想配列は覚えておくと、複雑なデータを扱う時に便利です。
次回もLinuxコマンドの学習を続けていきましょう!