Paepoi » ShellScript Tips » ShellScript Tips | 配列
ShellScript Tips | 配列
# 最終更新日 2022.05.01
- 一部追記と連想配列を追加
- 一部追記と連想配列を追加
配列 (bash)
#!/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)
#!/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
連想配列
#!/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.