bashで定義された配列の長さを数える方法は?

bashは初めてで、質問に答えるのに適したチュートリアルが見つかりません。

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

currenttotalの値を計算したいのですが、これは次のようになります。

1/3 2/3 3/3 

あらゆる種類のヒントをありがとうございます。

コメント

  • 入力する必要があることに注意してください${array[@]}を二重引用符で囲みます。そうしないと、array=("item 1" "item 2" "item 3")のような入力で単語分割が実行されて望ましくない結果が得られます。

回答

${!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 

<を使用できます。 p>与える

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

コメント

  • 1,2,3を取得したい場合は、私はこれを行います:echo ($index+1)/${#array[@]}
  • ところで、この方法では'アイテム1を取得できないようです。ループ内のitem2、item3。 item1、item2、item3のものを処理する他のコードがまだあります。ありがとう、
  • 編集された投稿を参照してください。

回答

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

一部の基本的な実装では、0または1を最初のインデックスとして使用します。少なくとも1つのBasicを使用すると、[n]から[m]にインデックスを付ける配列を指定できます。ここでnおよびmは、nが小さい限り、負の値でも任意の整数値を持つことができます。 m以上。入力された[index]から値nが差し引かれます。インデックスがnに対応する場合はindex-n = 0として。

ただし、独自のコードで同じことを実行できます。 。順序を逆にすることもできますこの方法での配列の例:

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

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です