logo

Bash スクリプト – 配列

配列 は、プログラミングまたはスクリプト作成における重要な概念です。配列を使用すると、特定のタスクに使用できるリスト形式で要素を保存および取得できます。 bash には、データをリスト形式で保存するためのコマンド ラインでのスクリプトの作成に役立つ配列もあります。この記事では、bash スクリプトにおける配列の基本を理解します。

配列の作成

bash スクリプトで基本的な配列を作成するには、宣言を使用できます。 -a コマンドの後に、指定する配列変数の名前を続けます。



#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball )>

または

#!/bin/usr/env bash sport[0]=football sport[1]=cricket sport[2]=hockey sport[3]=basketball>

要素の値は、必要に応じて、任意の整数、文字列、またはその他の形式のデータにすることができます。 bash スクリプトで配列が 2 つの方法で宣言されていることがわかります。前者の方が便利で、宣言するのにそれほど手間がかからないと思われます。配列を一度に宣言する場合は前者が最適な選択ですが、要素を少しずつ追加する場合は後者が適しています。

配列の印刷

配列を宣言した後、配列内のすべての要素を表示したい場合は、@ 記号を使用できます。



#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}'>

echo '${array_name[@]}'>

すべての要素を表示するには、[@] を配列のインデックスとして使用します。すべての要素はスペースで区切られて出力されます。変数を囲む引用符は展開され、配列内のすべての要素が出力されます。

配列の反復処理

配列を一度に 1 要素ずつ反復するには、ループを使用し、その本体内で任意の操作を実行できます。



#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) for i in ${nums[@]} do echo -e '$i 
' done>

ご覧のとおり、for ループを使用して配列の要素を 1 つずつ出力しています。前のセクションでは、配列のすべての要素を取得し、それを for a ループで 1 つずつ反復処理するというトリックを使用しました。 ${array_name[@]} は配列内のすべての要素に展開され、for ループはこの例の反復子を使用して要素を 1 つずつ繰り返します。 変数 i 、 for ループの本体内に、 変数/反復子 i したがって、配列を反復処理します。

配列内の要素の数を取得します

要素配列の数を取得するには、${array_name[@]} の s の配列名の前に # 演算子を使用します。

 #!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${#sport[@]}'>

したがって、次のコマンドを使用して配列のサイズを返します。 ${#sport[@]}、 # はその隣の変数のサイズを取得するために使用され、二重引用符を使用してコマンドの値が評価され、必要に応じて配列内の要素の数が取得されます。

配列への要素の挿入

要素を挿入するのは非常に簡単です。要素の適切なインデックスを設定し、その後に指定する要素の値を設定する必要があります。

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' sport[4]='dodgeball' sport[2]='golf' echo '${sport[@]}'>

5 番目の要素 (4 番目のインデックス) を配列に追加し、配列の 3 番目の要素 (2 番目のインデックス) も変更/編集しました。の 配列名[インデックス]=値 配列の要素を追加、変更、または初期化するためのすべてのテクニックです。

+= 演算子を使用して要素を配列に追加することもできます。

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' sport+=('golf' 'baseball') echo '${sport[@]}' echo 'Size : ${#sport[@]}'>

この例にあるように、最小限のコードで複数の要素を配列に追加できます。 array_name+=(elements) を使用して要素を配列に追加します。

配列からの要素の削除

配列から要素を削除するには、unset コマンドを使用します。このコマンドは、変数の名前、この場合は配列名とその要素のインデックスを受け取ります。インデックスは相対的なものにすることもできます。つまり、-1 は最後の要素を示し、-2 は最後から 2 番目というようになります。

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) unset sport[1] echo '${sport[@]}' echo '${#sport[@]}'>

ご覧のとおり、unset arrayname[index] は配列からインデックスの要素を削除します。また、配列のサイズが 4 から 3 に減少しました。これは、要素が単に空白に置き換えられるだけでなく、完全に削除されることを示しています。

相対インデックスの使用

-1、-2 などのインデックスを使用すると、要素は最後の要素から参照されるため、後方からの相対順序で要素を削除または変更することもできます。

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) unset sport[-3] echo '${sport[@]}'>

ご覧のとおり、インデックス 1 は後ろから -3 としても参照されるため、大きな配列内の特定の要素を参照することが比較的簡単になります。

配列を結合する

配列を結合(ポーションを取り出し)して、別の変数/配列に代入または出力することができます。

#!/bin/usr/env bash declare -a sport sport+=('football' 'cricket' 'hockey' 'basketball') sport+=('golf' 'baseball') echo 'sport = ${sport[@]}' arr='${sport[@]:1:3}' echo 'arr = ${arr[@]}'>

スポーツ配列からチャンク、つまりインデックス 1 から 3 までの要素を取り出し、これも配列である arr 変数に割り当てました。 @ 演算子は配列からすべての要素を取得し、インデックス 1 と 3 の間で配列を結合して、スポーツ配列の 1、2、3 の要素 (クリケット、ホッケー、野球) を取得します。

静的配列を定義し、配列の要素を出力します。

#To declare static Array programmingArray=(Java Python Ruby Perl) #In below 2 ways we can print the elements of the static array echo 'Way 1 of printing static values by using [@]:0 - ' ${programmingarray[@]$ echo 'Way 2 of printing static values by using [*]:0 - ' ${programmingarray[*]$>

2way で静的配列の要素を出力できます

プログラムの実行

sh So, we can give as sh arraycheck2.sh # arraycheck2.sh is the name of the script file here>

スクリプト ファイルでコマンド ライン引数を渡す

#All the array elements are stored in an array called programmingArray programmingArray=('$@') #Index values start from 0 #If we do not specify the index, it will take up the size of first index value echo 'Size of programmingArray at 0th location..:' $(#programmingArray[0]} echo 'Size of programmingArray at 1st location..:' $(#programmingArray[1]}>

上記のスクリプトは次のように実行できます

# ここで Java、Python、Ruby はコマンドライン引数です

文字を int Java に変換
sh arrayCheck.sh Java Python Ruby>

スクリプトの実行手順:

プログラミング配列=(Java Python Ruby)

#Java は 0 番目のインデックスに存在し、そのサイズは以下の方法で計算できます。

${#programmingArray[0]}

同様に、Python は最初のインデックスに存在し、そのサイズは以下の方法で計算できます。

${#programmingArray[1]}

出力:

for ループを使用して配列値を反復する

$@ は、コマンドライン引数を介して渡されたすべての値を提供し、配列に格納されます。

for ループを使用して反復できます

declare -a programmingArray=('$@') i=0 for programming in '$@' do echo 'Array value at index ' $i ' : ' $programming i=$((i+1)); done>

出力:

それぞれの記号が何を表しているのかを簡単に見てみましょう

構文

出力
arr=()

arr[0]=3 1番目の要素を上書きします

arr+=(4) 値を追加します

str=$(ls) ls 出力を文字列として保存します

arr=( $(ls) ) ls 出力をファイルの配列として保存します

${arr[@]:s:n} インデックスから始まる n 個の要素を取得します

#一連の値を提供できます

このような

arr=(1 2 3)

配列を初期化するには
${arr[0]} 最初の要素を取得します。インデックスは常に 0 から始まります
${arr[@]} すべての要素を取得するには、ループ内で反復できます。
${!arr[@]} 配列インデックスのみを取得するには
${#arr[@]} 配列のサイズを計算するには
arr[2]=3 3 番目の要素を上書きするには、この方法で使用する必要があります。インデックスは 0 から始まるため、arr[2] が正しいです。
arr+=(40) 値を追加するには、+ を使用してから = で割り当てることができるため、+= が使用されます。
str=$(ls) ls コマンドの出力を文字列として保存するには (この出力の例 4 を示します)
arr=( $(ls) ) ls 出力をファイルの配列として保存するには (この出力の例 5 を示します)
${arr[@]:s:n} インデックス s から始まる n 個の要素を取得するには