GNU/Linux >> Linux の 問題 >  >> Linux

Bash配列

配列は、最も使用されている基本的なデータ構造の1つです。配列は、その中に複数の変数を格納できる変数であると考えることができます。

この記事では、Bash配列について説明し、Bashスクリプトでそれらを使用する方法を説明します。

Bash配列#

Bashは、1次元の数値インデックス付きおよび連想配列タイプをサポートします。数値配列は整数を使用して参照され、結合法則は文字列を使用して参照されます。

-1のインデックスである負のインデックスを使用して、数値インデックス付き配列に最後からアクセスできます。 最後の要素を参照します。インデックスは連続している必要はありません。

ほとんどのプログラミング言語とは異なり、Bash配列要素は同じデータ型である必要はありません。文字列と数値の両方を含む配列を作成できます。

Bashは多次元配列をサポートしておらず、配列でもある配列要素を持つことはできません。

配列に格納できる要素の最大数に制限はありません。

Bash配列の作成#

Bashの配列は、さまざまな方法で初期化できます。

数値インデックス付き配列の作成#

Bash変数は型指定されておらず、任意の変数を宣言せずにインデックス付き配列として使用できます。

配列を明示的に宣言するには、declarebuiltinを使用します。

declare -a array_name

インデックス付き配列を作成する1つの方法は、次の形式を使用することです。

array_name[index_1]=value_1
array_name[index_2]=value_2
array_name[index_n]=value_n

ここで、index_* は正の整数です。

数値配列を作成するもう1つの方法は、括弧内に要素のリストを空のスペースで区切って指定することです。

array_name=( element_1 element_2 element_N )

上記の形式を使用して配列を作成すると、インデックス作成はゼロから始まります。つまり、最初の要素のインデックスは0になります。 。

連想配列の作成#

数値インデックスとは異なり、連想配列は使用する前に宣言する必要があります。

連想配列を宣言するには、declareを使用します -Aが組み込まれています (大文字)オプション:

declare -A array_name

連想配列は、次の形式を使用して作成できます。

declare -A array_name

array_name[index_foo]=value_foo
array_name[index_bar]=value_bar
array_name[index_xyz]=value_xyz

ここで、index_* 任意の文字列にすることができます。

以下のフォームを使用して連想配列を作成することもできます:

declare -A array_name

array_name=( 
  [index_foo]=value_foo 
  [index_bar]=value_bar 
  [index_xyz]=value_xyz 
)

配列操作#

Bash配列の構文は、最初は少し奇妙に見えるかもしれませんが、この記事を読むと、より意味がわかります。

参照要素#

単一の要素を参照するには、要素のインデックスを知っている必要があります。

次の構文を使用して、任意の要素を参照できます。

${array_name[index]}
配列要素にアクセスするための構文は、ほとんどのプログラミング言語の構文に似ています。中括弧${} シェルのファイル名拡張演算子を回避するために必要です。

1のインデックスを持つ要素を印刷してみましょう :

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print element
echo ${my_array[1]}
Helium

@を使用する場合 または* インデックスとして、単語は配列のすべてのメンバーに展開されます。使用するすべての要素を印刷するには:

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium

@の唯一の違い および* フォーム${my_array[x]} 二重引用符で囲まれています。この場合、* 配列要素がスペースで区切られている単一の単語に展開されます。 @ 各配列要素を個別の単語に展開します。これは、フォームを使用して配列要素を読み書きできない場合に特に重要です。

配列のキーを印刷するには、!を追加します 配列名の前の演算子:

${!array_name[index]}

次に例を示します:

## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## print all elements
echo "${!my_array[@]}"
0 1 2 3

配列の長さ#

配列の長さを取得するには、次の形式を使用します。

${#array_name[@]}
構文は、#を追加してすべての要素を参照する場合と同じです。 配列名の前の文字。
## declare the array
declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## array Length
echo ${#my_array[@]}
4

アレイをループします#

配列内の各アイテムを反復処理する最も一般的な方法は、forループを使用することです。

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## Array Loop
for i in "${my_array[@]}"
do 
  echo "$i"
done

上記のコードは配列を反復処理し、各要素を新しい行に出力します:

Hydrogen
Helium
Lithium
Beryllium

すべてのキーと値を印刷する方法の例を次に示します。

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## Array Loop
for i in "${!my_array[@]}"
do
  echo "$i" "${my_array[$i]}"
done
0 Hydrogen
1 Helium
2 Lithium
3 Beryllium

配列をループする別の方法は、配列の長さを取得し、C styleを使用することです。 ループ:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

# Length of the array
length=${#my_array[@]}

# Array Loop
for (( i=0; i < ${length}; i++ ))
do
  echo $i ${my_array[$i]}
done
0 Hydrogen
1 Helium
2 Lithium
3 Beryllium

新しい要素を追加する#

新しい要素をbash配列に追加し、そのインデックスを指定するには、次の形式を使用します。

my_array[index_n]="New Element"

次に例を示します:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## add new element
my_array[9]="Aluminum"

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium Aluminum

インデックスを指定せずに配列に新しい要素を追加する別の方法は、+=を使用することです。 オペレーター。 1つまたは複数の要素を追加できます:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## add new elements
my_array+=( Cobalt Nickel )

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Lithium Beryllium Cobalt Nickel

要素を削除する#

1つの要素を削除するには、要素のインデックスを知っている必要があります。 unsetを使用して要素を削除できます コマンド:

unset my_array[index]

例を見てみましょう:

declare -a my_array=( "Hydrogen" "Helium" "Lithium" "Beryllium" )

## remove element
unset my_array[2]

## print all elements
echo "${my_array[@]}"
Hydrogen Helium Beryllium

結論#

数値インデックス付きの連想配列を作成する方法を説明しました。また、配列を反復処理し、配列の長さを計算し、要素を追加および削除する方法も示しました。

ご質問やご意見がございましたら、お気軽にコメントをお寄せください。


Linux
  1. Bashの文字列/配列から一意の要素の配列を作成するにはどうすればよいですか?

  2. Bash変数代入の単一括弧?

  3. 例を含む Bash 配列

  1. 5つの実用的な例で説明されたAWK配列

  2. bash `ls` 出力を json 配列に変換します

  3. bash 配列と負の添字、はいまたはいいえ?

  1. bash のテキスト文字列を配列に変換する

  2. bash スクリプトと zsh シェルでの配列の動作 (開始インデックス 0 または 1?)

  3. bashで配列値をシフトする方法