在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

答案2

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

相关内容