Bash

在bash中,如何在沒有循環的情況下獲取數組最後一個元素的索引

  • May 2, 2022

在 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:

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

要包含稀疏數組的情況,您可以創建索引數組並獲取最後一個:

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

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

echo "$i"
9
lst=( [0]=1 [1]=2 [9]=3 )
echo ${lst[@]@A}           # show elements and indexes
echo ${lst[-1]}            # last  element
echo ${!lst[@]}            # list of indexes
: ${!lst[@]} ; echo $_     # last index

引用自:https://unix.stackexchange.com/questions/701017