说我有一个数组:
arr=(a b c d e f)
如果我想获取数组的最后一个元素,我通常必须得到元素的总数,减去一个并使用该数字作为索引调用:
$ echo ${#arr[@]}
6
$ echo ${arr[${#arr[@]}-1]}
f
但是,I see最近(Bash 4.2 - 4.3)你可以使用负面索引:
$ echo ${arr[-1]}
f
$ echo ${arr[-2]}
e
所以我想知道:这是什么时候介绍的?它也可以被其他shell使用,比如ksh,zsh ......?
我的研究表明:
Bash-4.3-rc1 available for FTP
一个。修复了导致使用a分配未设置变量的错误 负下标导致分段错误。
湾修复了使用a导致赋值给字符串变量的错误 负下标使用不正确的索引。
...
X。 shell现在允许分配,引用和取消设置元素 使用负下标的索引数组(a [-1] = 2,echo $ {a [-1]}) 从数组的最后一个元素开始倒数。
引用没有下标的数组变量相当于 引用下标为0.如果下标用于引用 索引数组的元素求值为小于零的数字, 它被解释为相对于大于最大索引的一个 数组,所以负数索引从数组的末尾开始计数, 并且索引为-1指的是最后一个元素。
但是我想知道这是否已经在Bash 4.2中,因为第一个资源提到了一个修复过的bug。
答案 0 :(得分:4)
据我所见https://tiswww.case.edu/php/chet/bash/CHANGES,新功能就在这一部分:
本文档详细介绍了此版本 bash-4.3-alpha之间的变化, 和之前的版本,bash-4.2-release 。
...
X。 shell现在允许使用负数下标(a [-1] = 2,echo $ {a [-1]})分配,引用和取消设置索引数组的元素,这些数字从数组的最后一个元素开始计数。
修复:
本文档详细介绍了此版本 bash-4.3-beta2与之前版本bash-4.3-beta 之间的变化。
1改为Bash
一个。修复了导致的错误 使用负下标分配给未设置的变量以导致分段错误。
湾修复了导致使用负下标分配给字符串变量以使用不正确索引的错误。
它是Bash 4.3中新功能的修复。