正如 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
5 回答
使用索引数组,您可以这样:
如果您的数组始终是顺序的并且从0开始,则可以执行以下操作:
array[${#array[@]}] = 'foo'
${#array_name[@]}
获取数组的长度就在这里:
Bash Reference Manual:
正如 Dumb Guy 指出的那样,重要的是要注意数组是否从零开始并且是顺序的 . 由于您可以分配和取消设置非连续索引,因此
${#array[@]}
并不总是数组末尾的下一个项目 .以下是获取最后一个索引的方法:
这说明了如何获取数组的最后一个元素 . 你会经常看到这个:
如您所见,因为我们正在处理稀疏数组,所以这不是最后一个元素 . 这适用于稀疏和连续数组,但是: