Paepoi

スポンサードリンク
Paepoi » ShellScript Tips » ShellScript Tips | 配列

ShellScript Tips | 配列

# 最終更新日 2022.05.01

- 一部追記と連想配列を追加

配列 (bash)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash
 
# 配列というと C 言語のものを想像しますがまったく違いかなり使い辛い
# bash では $IFS 区切りの文字列で充分ですが知識だけでも
 
# 配列の作成、括弧で囲む
array=(先頭 次の項目 最後)
 
# echo してみる、インデックス指定無しだと先頭が出力される
echo $array
#=> 先頭
 
# インデックスは C 言語と同様、ただしブレースが必要
echo ${array[1]}
#=> 次の項目
 
# += で追加できる、括弧で囲む必要あり
array+=(追加)
 
# インデックスを使って追加や書き換えできる
array[2]=三番目
 
# 範囲は関係ない、インデックスは並び順ではなく番号
array[10]=九番目
echo ${array[10]}
#=> 九番目
 
# 単なる未定義になる
echo 百番目は ${array[100]} です
#=> 百番目は です
 
# ポインタではない
array[4]=${array[0]}
array[0]=最初
echo ${array[4]}
#=> 先頭
 
# 全てを出力する時は @ を指定
# for item in "${array[@]}"; do
# にてループ文に使える
echo ${array[@]}
#=> 最初 次の項目 三番目 追加 先頭 九番目

配列 (zsh)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/bin/zsh
 
# zsh の場合はループを使うために必須の知識になります
# インデックスがゼロではなく 1 から始まることに注意
 
# 配列の作成、括弧で囲む
array=(先頭 次の項目 最後)
 
# echo してみる、インデックス指定無しだと全部出力される
echo $array
#=> 先頭 次の項目 最後
 
# インデックスは C 言語と同様
# bash と違ってブレース不要
# 先頭は 1 で最後は -1
#echo ${array[1]}
echo $array[2]
#=> 次の項目
 
# += で追加できる
# bash と違い括弧で囲む必要はない
#array+=(追加)
array+=追加
# @ は bash 互換として使えるようです、不要だけど
echo $array[@]
#=> 先頭 次の項目 最後 追加
 
# インデックスを使って追加や書き換えできる
# bash と同じだけどインデックス番号に注意
array[3]=三番目
echo $array[@]
#=> 先頭 次の項目 三番目 追加
 
# 範囲は関係ない、インデックスは並び順ではなく番号
array[10]=九番目
echo $array[10]
#=> 九番目
 
# 単なる未定義になる
echo 百番目は $array[100] です
#=> 百番目は です
 
# ポインタではない
array[-2]=$array[1]
array[1]=最初
echo $array[-2]
#=> 先頭
 
# for は bash の ISF 区切り同様
for item in $array; do
    echo "item: $item"
done
# bash と同じヒアドキュメントで無理やり複数業コメントが可能
# atom, vscode 等は色分けしてくれる
: << __OUTPUT__
item: 最初
item: 次の項目
item: 三番目
item: 追加
item: 先頭
item: 九番目
__OUTPUT__r

連想配列
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/sh
 
# 連想配列は bash zsh ともに一応使えますが、、、、、
 
# declare で A 属性にする (Associative array)
# typeset は bash にて廃止予定らしい
declare -A suzuki=([バイク]=かっこいい [車]=ステキ)
 
# 取り出しは配列同様にブレースが必要
echo ${suzuki[車]}
 
# 追加
suzuki[シニアカー]=サイコー
 
# キーを全部取り出しは bash zsh で違っている
if [[ $SHELL =~ zsh ]]; then
    echo ${(k)suzuki[@]}
else
    echo ${!suzuki[@]}
fi
 
# 値を全部取り出し
echo ${suzuki[@]}
Copyright(C) sasakima-nao All rights reserved 2002 --- 2025.