Bashで配列の長さを見つける方法
Bashは数値配列と連想配列の両方をサポートしています。これらの配列の要素の合計数は、Bashで複数の方法で計算できます。配列の長さは「#」記号やループを使用するか、「wc」や「grep」のようなコマンドを使用してカウントできます。このチュートリアルでは、Bashにおける配列の長さをカウントするさまざまな方法が示されています。
「#」を使って配列の長さを見つける
“#” シンボルを使用することは、配列の長さを計算する最も簡単な方法です。このチュートリアルのこの部分では、数値配列および連想配列の要素の合計数をカウントする方法が示されています。
例1: “#”を使用して数値配列の長さを数える
次のスクリプトを使って、数値配列の長さをカウントして印刷するBashファイルを作成します。「#」シンボルを使用します。「@」および「*」シンボルは、配列のすべての要素を示すためにここで使用されます。
#Declare a numeric array
items=("Shirt" "T-Shirt" "Pant" "Panjabi" "Shoe")
#Count array length using '#'
echo "Array length using '#' with '@': ${#items[@]}"
echo "Array length using '#' with '*': ${#items[*]}"スクリプトを実行した後、以下の出力が表示されます。この配列には5つの文字列値が含まれており、“@”および“*”の記号の両方に対して同じ出力が表示されます:
例2:“#”を使用して連想配列の長さを数える
次のスクリプトを使って、連想配列の長さをカウントして印刷するBashファイルを作成します。「#」シンボルを使用します。「@」および「*」シンボルは、配列のすべての要素を示すためにここで使用されます。
#Declare an associative array
declare -A items=([6745]="Shirt (M)" [2345]="Shirt (L)" [4566]="Pant (36)")
#Count array length using '#'
echo "Associative array length using '#' with '@': ${#items[@]}"
echo "Associative array length using '#' with '*': ${#items[*]}"スクリプトを実行した後に次の出力が表示されます。この配列には3つの文字列値が含まれており、「@」と「*」シンボルの両方に対して同じ出力が表示されます:
ループを使って配列の長さを求める
ループを使用することは、配列内の要素の総数をカウントする別の方法です。配列の長さは、次の例のように while ループを使用してカウントされます:
例: ループを使用して配列の長さをカウントする
次のスクリプトを持つBashファイルを作成します。このスクリプトでは、while ループを使用して要素の総数をカウントします。スクリプト内でdeclareコマンドを使用して、4つの文字列の値からなる数値配列が宣言されます。forループが配列の値を繰り返し印刷するために使用されます。ここでは、$counter 変数が配列の長さをカウントするために使用され、ループの各反復でインクリメントされます。
#Declare an array
declare -a items=("Shirt(M)" "Shirt(L)" "Panjabi(42)" "Pant(38)")
echo "Array values are:"
#Count array length using loop
counter=0
#Iterate the array values
for val in ${items[@]}
do
#Print the array value
echo $val
((counter++))
done
echo "The array length using loop is $counter."スクリプトを実行した後、以下の出力が表示されます。出力には配列の値と配列の長さが印刷されています。
「wc」コマンドを使用して配列の長さを見つける
配列の長さは、いくつかのコマンドを使用してカウントできます。“wc” コマンドはその一つです。しかし、このコマンドは配列に複数の単語からなる文字列が含まれている場合、正しい出力を返しません。配列の要素の合計数をカウントし、“#” 記号と “wc” コマンドでカウントされた配列の長さの値を比較する方法は、以下の例に示されています。
例:“wc”コマンドを使用して配列の長さを数える
次のスクリプトを使用して、合計要素数をカウントするBashファイルを作成します。「wc」コマンドを使用します。スクリプト内に5つの文字列値の数値配列が宣言されています。「wc」コマンドの-wオプションを使用して、5つの要素を持つ2つの配列の長さをカウントします。1つの配列には1語の文字列が含まれ、もう1つの配列には2語の文字列が含まれています。2つ目の配列の長さは「#」記号と「wc」コマンドを使用してカウントされます。
#Declare a numeric array of a single word of the string
items=("Shirt" "T-Shirt" "Pant" "Panjabi" "Shoe")
echo "Array values: ${items[@]}"
#Count array length using 'wc'
len=`echo ${items[@]} | wc -w`
echo "Array length using 'wc' command: $len"
#Declare a numeric array of multiple words of the string
items2=("Shirt (XL)" "T-Shirt (L)" "Pant (34)" "Panjabi (38)" "Shoe (9)")
echo "Array values: ${items2[@]}"
echo "Array length using '#': ${#items2[@]}"
#Count array length using 'wc'
len=`echo ${items2[@]} | wc -w`
echo "Array length using 'wc' command: $len"スクリプトを実行した後、次の出力が表示されます。この出力によれば、“wc” コマンドは、2語の文字列値を含む配列に対して誤った出力を生成します:
結論
このチュートリアルでは、配列の長さを「#」記号、ループ、そして「wc」コマンドを使用してカウントする方法が示されています。



