The GNU bash manual tells me
An indexed array is created automatically if any variable is assigned to using the syntax
name[subscript]=v
Old bashes (like the default one on Macs these days) don't support negative subscripts. Apart from the "substring expansion" used in the accepted answer, a possible workaround is to count the desired index from the array start within the brackets:
$ array=(one two three)
$ echo "${array[${#array[@]}-1]}"
three
With this approach, you can pack other parameter expansion operations into the term, e.g. "remove matching prefix pattern" th
:
$ echo "${array[${#array[@]}-1]#th}"
ree