Как указывает Dumb Guy , важно отметить, начинается ли массив с нуля и является ли он последовательным. Поскольку вы можете присваивать и сбрасывать несмежные индексы, ${#array[@]}
не всегда является следующим элементом в конце массива.
$ array=(a b c d e f g h)
$ array[42]="i"
$ unset array[2]
$ unset array[3]
$ declare -p array # dump the array so we can see what it contains
declare -a array='([0]="a" [1]="b" [4]="e" [5]="f" [6]="g" [7]="h" [42]="i")'
$ echo ${#array[@]}
7
$ echo ${array[${#array[@]}]}
h
Вот как получить последний индекс:
$ end=(${!array[@]}) # put all the indices in an array
$ end=${end[@]: -1} # get the last one
$ echo $end
42
Это показывает, как получить последний элемент массива. Вы часто будете видеть это:
$ echo ${array[${#array[@]} - 1]}
g
Как видите, поскольку мы имеем дело с разреженным массивом, это не последний элемент. Это работает как для разреженных, так и для смежных массивов, хотя:
$ echo ${array[@]: -1}
i