配列 特定のタイプの値を格納するために使用されるデータ構造のタイプです。配列を変数と考えることもできますが、配列が格納できる値は1つだけであり、配列はその中に複数の値を格納できます。配列の概念は、bashに限定されているだけではありません。使用するプログラミング言語には配列が含まれますが、実装に違いがあります。
Bashは2種類の配列をサポートしています:
- インデックス付き配列
- 連想配列
インデックス付き配列は、要素(値)が格納され、 0から始まる整数が割り当てられる配列の一種です。 Nへ 。配列内の要素は、インデックス番号を使用して参照されます。これについては、次の記事で詳しく知ることができます。この記事の主な焦点は、インデックス付き配列のみです。
Bashでインデックス付き配列を初期化する方法
アレイを操作するための最初のステップは、アレイを作成することです。 配列の作成、定義、初期化という用語 互換的に使用されますが、同じ意味を指します-配列を作成します。
配列を作成するには、角かっこを使用し、角かっこ内に配列要素(値)を配置する必要があります。
$ arr1=( one 2 three 4 )
注意すべき重要なポイント:
- Bash配列は、異なるデータ型の要素を格納できます。一部のプログラミング言語では、同じ型の配列にのみ値を格納できます。
- 配列に格納できる要素の数に制限はありません。システムメモリの可用性によって異なります。
declare
を使用することもできます -a
を使用したコマンド インデックス付き配列を作成するためのフラグ。
$ declare -a arr1
$ arr1=( one 2 three 4 )
または、
$ declare -a arr1=( one 2 three 4 )
配列の要素を追加または表示する方法
前のセクションで示したように、値を含む配列を作成するか、空の配列を作成して後で値を追加することができます。以下は、空の配列を作成する方法です。
$ locations=()
配列の各要素には、 0から始まるインデックス値が関連付けられています Nへ 。インデックス位置を使用して、配列に新しい要素を追加する必要があります。
$ locations[0]="Chennai"
$ locations[1]="Mumbai"
これは、配列に要素を追加する図解です。

配列内の要素を表示するには、次のいずれかの構文を使用できます。
$ echo ${locations[@]}
$ echo ${locations[*]}

@と*の違いと、それが配列でどのように機能するかを知るには、 Bash For Loopの「Loopoverarrayelements」のセクションを参照してください。 ガイド。
@
を使用せずに配列要素を一覧表示しようとした場合 または*
配列の最初の要素のみが出力されます。
$ echo ${locations}

インデックス位置を使用して、特定の要素に直接アクセスできます。
$ echo ${locations[1]}

配列のインデックス値
前のセクションでは、インデックス位置を使用して配列に要素を追加する方法を示しました。インデックス位置を使用して配列を追加する場合、スキップして別のインデックス位置に要素を追加できます。
配列の場所には、 0の位置に2つの要素があります および1 。これで、インデックス2をスキップして、さまざまなインデックス位置に追加できます。
$ locations[5]="Delhi"

上の画像から、インデックス位置5の配列に新しい要素を追加したことがわかります。

要素のインデックス値を出力する場合は、配列の前に"!"
を付けます。 以下のような記号:
$ echo ${!locations[@]}
これにより、要素を印刷する代わりに、インデックス値のみが印刷されます。

インデックスと要素の両方を印刷するには、次のスニペットを使用します。
for val in ${!locations[@]} do echo "index = ${val} , value = ${locations[$val]}" done

配列に値を追加する
インデックス値を使用せずに配列に新しい要素を追加できます。これにより、要素が配列に追加されます。
locations=( Chennai Mumbai Delhi ) locations+=( Bangalore ) locations+=( Hyderabad )
$ echo ${locations[@]}
$ echo ${!locations[@]}

配列の長さを見つける
#
配列の前の記号。
$ echo ${#locations[@]}

同じ#
を使用する シンボルの場合、配列が空かどうかも確認できます。
if [[ ${#locations[@]} -ne 0 ]]; then echo "Array is Not empty" else echo "Array is Empty" fi

配列から要素を削除する
配列から要素を削除するには、unset
を使用できます 指図。 unset
を使用する以下の例を見てください。 index(2)
から要素をコマンドします 削除されます。
$ echo ${locations[@]}
$ unset locations[2]
$ echo ${locations[@]}

アレイを削除する
配列を削除するには、同じunset
を使用できます コマンド。
$ unset locations
$ echo ${locations[@]}

配列を空にする
配列からすべての要素を削除して、配列を空のままにしておきたい場合があります。その場合は、アレイを再作成するだけです。
$ echo ${locations[@]}
Chennai Mumbai Delhi Hyderabad Bangalore
$ locations=()
$ echo ${locations[@]}

コマンド出力を配列として保存
任意のコマンドを実行して、出力を配列に格納することができます。コマンドはブラケットで囲む必要があります 出力を配列として保存します。
$ path_list=( $(echo $PATH | tr ":" "\n") )
$ echo ${path_list[@]}

配列スライシング
スライスにより、インデックス位置に基づいて配列の特定の要素を柔軟に引き出すことができます。
スライスの構文は次のとおりです。
${locations[@]:index:length}
すべての要素を取得したいが、特定の開始インデックス位置から取得したい場合は、インデックスのみを使用して次の方法で取得できます。
$ echo ${locations[@]:index} # syntax
$ echo ${locations[@]:2}

上記の例では、配列はインデックス位置2から最後の要素まで印刷されます。インデックスとともに長さを指定すると、次の式を使用して配列がスライスされます。
From index to index+length-1 (inclusive) # Formula
$ echo ${locations[@]:1:3}

インデックスをスキップして長さだけを指定すると、次の式を使用してスライスされます。
From Index 0 to length-1 (inclusive)
$ echo ${locations[@]::4}

結論
この記事では、bashインデックス付き配列について説明しました。 。複雑なbashスクリプトを書き始めるときは、配列が非常に重要です。さまざまなタイプのデータを簡単に保存、取得、操作することができます。 Pythonのようなプログラミング言語とは異なり、配列を使用して複雑なタスクを簡単に実行するための組み込みの方法はありませんが、それでも達成可能です。
次のガイドでは、連想配列について説明します。 詳細。
- Bashスクリプティング–例を使用して説明された連想配列
関連記事:
- Bashスクリプティング–ループの説明中およびループまで
- Bashスクリプト–例で説明されている関数
- Bashスクリプティング–例で説明されている変数
- 例を使用して説明されたBashリダイレクト
- Linuxの例で説明されているBashEchoコマンド
- 初心者向けのBashヒアドキュメントチュートリアル