在 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