Bashで定義された配列の長さを計算する方法は?

Bashで定義された配列の長さを計算する方法は?

私は初めてBashに触れて、私の質問に答えるための良いチュートリアルを見つけることができません。

array=( item1 item2 item3 )
for name in ${array[@]}; do
    echo current/total
    ... some other codes
done

期待される出力で合計値をcurrent計算したいと思います。total

1/3
2/3
3/3

どんなヒントでもくれてありがとう。

答え1

たとえば、次を使用して配列インデックスにアクセスし、 を使用して配列の長さ${!array[@]}にアクセスできます。${#array[@]}

#!/bin/bash

array=( item1 item2 item3 )
for index in ${!array[@]}; do
    echo $index/${#array[@]}
done

bashの配列は次のとおりです。ゼロインデックス、実際には次のようになります。

0/3
1/3
2/3

カウントを1から始めるには、に$index置き換えます$((index+1))。欲しいなら価値利用可能なインデックス、"${array[index]}"つまり

#!/bin/bash

array=( item1 item2 item3 )
for index in ${!array[@]}; do
    echo $((index+1))/${#array[@]} = "${array[index]}"
done

与える

1/3 = item1
2/3 = item2
3/3 = item3

答え2

インデックスが実際にインデックスであると考えると、ゼロインデックスは完全に有効です。オフセット配列のベースアドレスから始まります。実際に方言によって異なりますが、これが標準です。以前のJovial言語では、[0]配列の最大サイズが実際に含まれていました。だから始まります[1]

0一部の基本実装では、オプションで使用することも、最初のインデックスとして1使用することもできます。そして、少なくとも1つのBasicを使用すると、からの[n]インデックス配列を指定できます[m]。ここでnsum は .小さいか等しい場合は、任意の整数m値、負の数にすることができます。インデックスが対応するように、入力値からその値を減算します。nmn[index]index-n = 0n

ただし、自分のコードで同じことを行うことができます。次のように配列の順序を逆にすることもできます。

dim array(0, abs(m-n)); 
step=sign(m-n); 
if n > m then 
    base=m 
else 
    base=n; 
fi

このコード例は実際には言語の一部にすぎません。もっと読みやすくしたいです。ステップ変数は、正であるか負であるかに応じて、動きの見かけの方向を制御するために使用され、配列に入ったり出たりするときに実際には常に正の有効インデックスを計算するために使用されます[0]

関連情報