変数の宣言について

変数の宣言(数値)

code
echo 'i オプションは変数を数値として宣言'
declare -i n
echo "n=${n}"

echo '変数に数値(1)を代入した場合'
n=1
echo "n=${n}"

echo '変数に文字列を代入した場合'
n='hello'
echo "n=${n}"

echo '変数に数値(100)を代入した場合'
n=100
echo "n=${n}"
stdout
i オプションは変数を数値として宣言
n=
変数に数値(1)を代入した場合
n=1
変数に文字列を代入した場合
n=0
変数に数値(100)を代入した場合
n=100

変数の宣言(配列)

code
echo 'a オプションは変数を配列として宣言する'

declare -a arr
echo 'arr=(' "${arr[@]}" ')'

arr+=('one')
echo 'arr=(' "${arr[@]}" ')'

arr+=('two')
echo 'arr=(' "${arr[@]}" ')'
stdout
a オプションは変数を配列として宣言する
arr=( )
arr=( one )
arr=( one two )

変数の宣言(数値の配列)

code
echo 'i と a オプションで数値の配列を宣言できる'

declare -ia arr

echo 'arr=(' "${arr[@]}" ')'

arr+=('one')
echo 'arr=(' "${arr[@]}" ')'

arr+=(2)
echo 'arr=(' "${arr[@]}" ')'
stdout
i と a オプションで数値の配列を宣言できる
arr=( )
arr=( 0 )
arr=( 0 2 )

変数の宣言(連想配列)

code
echo 'A オプションで連想配列を宣言できる'
declare -A hash

hash[りんご]=200
hash[みかん]=120

echo 'キー :' "${!hash[@]}"
echo '値   :' "${hash[@]}"
stdout
A オプションで連想配列を宣言できる
キー : みかん りんご
値   : 120 200

変数の宣言(数値の連想配列)

code
echo 'i と A オプションで数値の連想配列を宣言できる'
declare -iA hash

hash[りんご]=200
hash[みかん]=120
hash[バナナ]=250万

echo 'キー :' "${!hash[@]}"
echo '値   :' "${hash[@]}"
stdout
i と A オプションで数値の連想配列を宣言できる
キー : みかん りんご
値   : 120 200
stderr
line 6: 250万: syntax error: invalid arithmetic operator (error token is "万")

変数の宣言(読み取り専用)

code
echo 'r オプションで読み取り専用の変数を宣言できる'
declare -r a1=100
a1=200
echo "a1=${a1}"
stdout
r オプションで読み取り専用の変数を宣言できる
a1=100
stderr
line 3: a1: readonly variable

変数の宣言(読み取り専用:配列)

code
echo 'r オプションで読み取り専用の変数を宣言できる(配列)'
declare -ra arr=(1 2 3)

echo '変数に配列を代入'
arr=()
echo "arr=(${arr[*]})"

echo '配列に要素を追加'
arr+=(4)
echo "arr=(${arr[*]})"

echo '配列の要素を変更'
arr[1]=100
echo "arr=(${arr[*]})"
stdout
r オプションで読み取り専用の変数を宣言できる(配列)
変数に配列を代入
arr=(1 2 3)
配列に要素を追加
arr=(1 2 3)
配列の要素を変更
arr=(1 2 3)
stderr
line 5: arr: readonly variable
line 9: arr: readonly variable
line 13: arr: readonly variable

変数の宣言(読み取り専用:連想配列)

code
echo 'r オプションで読み取り専用の変数を宣言できる(連想配列)'
declare -rA hash=(
  [りんご]=200
  [みかん]=120
)
echo 'key=(' "${!hash[@]}" ')'
echo 'val=(' "${hash[@]}" ')'

echo '変数に連想配列を代入'
hash=()
echo 'key=(' "${!hash[@]}" ')'
echo 'val=(' "${hash[@]}" ')'

echo '連想配列を要素を追加'
hash[バナナ]=300
echo 'key=(' "${!hash[@]}" ')'
echo 'val=(' "${hash[@]}" ')'
stdout
r オプションで読み取り専用の変数を宣言できる(連想配列)
key=( みかん りんご )
val=( 120 200 )
変数に連想配列を代入
key=( みかん りんご )
val=( 120 200 )
連想配列を要素を追加
key=( みかん りんご )
val=( 120 200 )
stderr
line 10: hash: readonly variable
line 15: hash: readonly variable

変数の宣言(名前参照)

code
echo 'n オプションで変数を名前参照として宣言できる'
a='りんご'
declare -n b=a
echo "${a}" : "${b}"
b='みかん'
echo "${a}" : "${b}"
stdout
n オプションで変数を名前参照として宣言できる
りんご : りんご
みかん : みかん

変数の宣言(名前参照:配列)

code
echo 'n オプションで変数を名前参照として宣言できる(配列)'

add() {
  declare -n a=$1
  a+=("$2")
}

declare -a arr=({1..3})
echo "arr=(${arr[*]})"

echo 'add 関数で arr 配列に要素を追加'
for i in {1..10}; do
  add arr "$i"
done
echo "arr=(${arr[*]})"
stdout
n オプションで変数を名前参照として宣言できる(配列)
arr=(1 2 3)
add 関数で arr 配列に要素を追加
arr=(1 2 3 1 2 3 4 5 6 7 8 9 10)

変数の宣言(名前参照:連想配列)

code
echo 'n オプションで変数を名前参照として宣言できる(連想配列)'

add() {
  declare -n a=$1
  a["$2"]="$3"
}

declare -A hash=( [りんご]=200 )
echo "key=${!hash[*]}"
echo "val=${hash[*]}"

echo 'add 関数で hash 連想配列に要素を追加'
add hash みかん 120
echo "key=${!hash[*]}"
echo "val=${hash[*]}"
stdout
n オプションで変数を名前参照として宣言できる(連想配列)
key=りんご
val=200
add 関数で hash 連想配列に要素を追加
key=みかん りんご
val=120 200