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