Bashで繰り返しなしで配列の最後の要素インデックスを取得する方法

Bashで繰り返しなしで配列の最後の要素インデックスを取得する方法

Bashでは、次のように配列全体を繰り返すことなく、配列の最後の(希少)要素のインデックスを取得できますか?

a=( e0 e1 ... )
i=0
while [ "$i" -lt $(( ${#a[@]} - 1 )) ]
do
  let 'i=i+1'
done
echo "$i"

少なくともbash v 4.2からは、次のようになります。配列の最後の要素の使用

e="${array[-1]}"

しかし、それは私を理解していないでしょう。ポジティブ他の要素が同じ値を持つことができるので、インデックスを作成します。

ベストアンサー1

配列がリーンでない場合、最後のインデックスは要素数 - 1 です。

i=$(( ${#a[@]} - 1 ))

スパース配列の場合を含めるには、インデックス配列を作成して最後の配列を取得できます。

a=( [0]=a [1]=b [9]=c )

indexes=( "${!a[@]}" )
i="${indexes[-1]}"

echo "$i"
9

おすすめ記事