Bashでインデックス配列を使用する方法
Bashはインデックス付き配列をサポートしており、これは基本的にインデックス番号を使ってアクセスできる要素のリストです。インデックス付き配列は、多くの関連する値を保存して操作したいときに特に便利です。インデックス配列の使い方についてさらに学ぶには、この記事を読むことをお勧めします。
インデックス配列とは何ですか
インデックス配列は、インデックスまたはキーを使用してアクセスできる要素のコレクションです。これらの配列は、特定の順序でデータを格納および取得するために使用でき、大量のデータを管理しやすくします。bashでインデックス配列を宣言するための構文は次のとおりです:
<array_name> =( element1 element2 element3 ... )ここで、array_name は配列の名前であり、element1、element2、element3 などは配列に格納される値です。値は空白で区切られ、配列を作成するために declare コマンドを使用することもできることに注意してください。
Bashでインデックス付き配列を使用する方法
bashでインデックス配列を作成するには、単に変数を宣言し、値を括弧内にスペースで区切って代入するだけです。以下はbashでインデックス配列を使う方法を示すいくつかの例です:
- リストを再注文する
- リストをフィルタリングする
- 出現回数をカウントする
- リストを更新する
Bashでリストを再注文する
特定の順序でアイテムのリストがあり、それを別の方法で並べ替えたい場合は、インデックス配列を使用してアイテムの新しい順序を作成できます。次のように:
#!/bin/bash
items=("Mango" "Pineapple" "Strawberry" "Cherry" "Grapes")
order=(4 2 0 3 1)
for i in "${order[@]}"
do
echo ${items[$i]}
done
この例では、5つの要素を持つitemsという配列を作成します。また、itemsの新しい順序を指定するorderというインデックス配列も作成します。その後、order配列をループ処理し、各値をインデックスとして使用して、items配列から対応するアイテムを取得し、出力します。
Bashでリストをフィルタリングする
アイテムのリストがあり、条件に基づいて特定のアイテムを除外したい場合、条件を満たすアイテムのインデックスを追跡するためにインデックス配列を使用できます。以下のように:
#!/bin/bash
items=("Mango" "Pineapple" "Strawberry" "Cherry" "Grapes")
indices=()
for i in "${!items[@]}"
do
if [[ ${items[$i]} == *"r"* ]]
then
indices+=($i)
fi
done
for i in "${indices[@]}"
do
echo ${items[$i]}
doneこの例では、5つの要素を持つitemsという配列を作成します。また、空のインデックス配列indicesも作成します。その後、items配列をループし、各アイテムに「r」という文字が含まれているかを確認します。含まれていれば、そのインデックスをindices配列に追加します。最後に、indices配列をループし、各値をインデックスとして使用して、items配列から対応するアイテムを取得し、それを出力します。
Bashでの出現回数のカウント
アイテムのリストがあり、各アイテムの出現回数を数えたい場合、インデックス配列を使用してカウントを追跡できます。以下はそのデモの例です:
#!/bin/bash
items=("Mango" "Pineapple" "Strawberry" "Cherry" "Grapes")
counts=()
for i in "${!items[@]}"
do
if [[ ! "${counts[@]}" =~ "${items[$i]}" ]]
then
counts+=("${items[$i]} 1")
else
index=$(echo "${counts[@]}" | tr ' ' '\n' | grep -n "^${items[$i]}" | cu)
count=$(echo "${counts[$index-1]}" | cut -d' ' -f2)
counts[$index-1]="${items[$i]} $((count+1))"
fi
done
for count in "${counts[@]}"
do
echo $count
doneまず、文字列のリストを持つ「items」という名前の配列を初期化します。それから、「counts」という名前の空の配列を宣言します。「items」配列の各アイテムに対して繰り返すためのforループが作成され、各アイテムが「counts」配列に既に存在するかどうかがチェックされます。
存在しない場合は、アイテムとカウントを1に設定して「counts」配列に追加します。存在する場合は、「counts」配列のそのアイテムのカウントを増やします。最後に、各アイテムとその対応するカウントを出力するために別のforループが使用されます。このコードの出力は、「items」配列内の各アイテムのカウントを印刷し、重複が別々にカウントされます。
Bashでリストを更新する
アイテムのリストがあり、そこにアイテムを追加または削除したい場合は、インデックス配列を使用できます。以下はそのデモンストレーションの例です:
#!/bin/bash
items=("Mango" "Pineapple" "Strawberry" "Cherry" "Grapes")
Adding a new element to the indexed array at index 2
items[6]="orange"
Deleting the element at index 2 from the indexed array
unset items[2]
Printing the updated array
echo "${items[@]}"
スクリプトでは、インデックス付き配列「items」が最初に5つの要素で定義されています。新しい要素を追加するには、単にarray[index]=valueという構文を使用して、希望のインデックスに値を割り当てます。このスクリプトでは、「orange」が配列のインデックス6に追加されます。要素を削除するには、削除したい要素のインデックスの後にunsetコマンドを使用します。この場合、インデックス2(「Strawberry」)の要素が削除されます。更新された配列は、その後「${array[@]}」という構文を使用して印刷され、配列全体が展開されます。
結論
インデックス配列は、単一の変数を使用して複数の値を保存および操作できる便利なbashの構造です。インデックス配列の構文と使用法を理解することで、より効率的で効果的なbashスクリプトを書くことができます。



