はじめに
bashのビルトインコマンドのdeclareを使って変数を宣言する方法を記述します。
変数の型を指定したり、デバッグで使用できたり。
大文字、小文字を変換するなど、変わった機能もあります。
環境
- Amazon Linux AMI release 2014.03
- bash 4.1.2
変数を宣言する
- 変数を数値として宣言する
iオプションを使用します。
declare -i num=1+2
str=1+2
echo $num # => 3
echo $str # => 1+2
- 変数を配列として宣言する
aオプションを使用します。
declare -a array=( Java Ruby Python )
echo ${array[0]} # => Java
echo ${#array[*]} #=> 3(配列の要素数)
for e in ${array[*]}
do
echo $e # => Java, Ruby, Pythonの順に出力
done
for i in ${!array{*}}
do
echo ${array[i]} # => Java, Ruby, Pythonの順位出力
done
- 変数を連想配列として宣言する
Aオプションを使用します。
declare -A hash=([Jack]=11 [Queen]=12 [King]=13)
echo ${hash['King']} # => 13
for v in ${hash[*]}
do
echo $v # => Jack, Queen, King(順序は任意)
done
for k in ${!hash[*]}
do
echo "$k:${hash[$k]}" # => Jack:11, Queen:12, King:13(順序は任意)
done
- 読み込み専用の変数とする
rオプションを指定します。
declare -r ro_var='readonly variable'
echo $ro_var # => readonly variable
ro_var='writable?' # => エラーになる
- 環境変数としてエクスポートする
xオプションを使用します。
declare -x env_var='environmental variables'
export -p | grep env_var # => export env_var="environmental variables"
export -p | grep TZ # => (出力なし)
date # => Wed Sep 3 15:14:37 UTC 2014
declare -x TZ='Asia/Tokyo'
export -p | grep TZ # => export TZ="Asia/Tokyo"
date # => Thu Sep 4 00:14:37 JST 2014
- 変数の内容を出力する
pオプションを使用します。
declare -i num=1+2
declare -a array=(Java Ruby Python)
declare -A hash=([Jack]=11 [Queen]=12 [King]=13)
var='Hello, World!'
declare -p num # => declare -i num="3"
declare -p array # => declare -a array='([0]="Java" [1]="Ruby" [2]="Python")'
declare -p hash # => declare -A hash='([Jack]="11" [King]="13" [Queen]="12" )'
declare -p var # => declare -- var="Hello, World!"
- 変数を大文字へ変換する
uオプションを使用します。
declare -u upper_var='hello, world!'
echo $upper_var # => HELLO, WORLD!
- 変数を小文字へ変換する
declare -l lower_var='HELLO, WORLD!'
echo $lower_var # => hello, world!