Bash数组中的负下标

创build一个简单的bash堆栈脚本后,我遇到了与bash数组有关的错误。

从Bash手册:

如果使用以下语法为variables赋值,则会自动创build索引数组:

name[subscript]=value

name [下标] = value下标被视为必须计算为数字的算术expression式。 如果下标的计算结果为小于零的数字,则将其用作大于数组最大索引的偏移量(因此,下标-1表示数组的最后一个元素)。

不幸的是我的服务器环境稍微有点不同,

负面下标在Ubuntu 14.04 / GNU bash版本4.3.11(1)上工作。 但是,当我试图在我的服务器上运行与GNU bash版本4.2.46(1)相同的脚本时,我遇到了以下错误:

 line 46: [-1]: bad array subscript 

我试图创build一个数组,并直接从terminal(不在脚本中)直接调用最后一个元素,它的工作原理:

 user@local:~$ arr=( 1 2 3 4 5 ) user@local:~$ echo ${arr[-1]} 5 

我在这里有点困惑。 有没有解决方法或解决方法?

猜猜Bash changelog中有什么:

对于这个版本,bash-4.3-beta和之前的版本bash-4.3-alpha之间的变化

X。 shell现在允许使用从数组的最后一个元素开始计数的负下标(a [-1] = 2,echo $ {a [-1]})来分配,引用和取消设置索引数组的元素。

对于这个版本,bash-4.2-alpha和之前的版本bash-4.1-release之间的变化

页。 索引数组的负下标,以前的错误现在被视为最大分配索引+ 1的偏移量。

所以你的测试只是读取负偏移量(在4.2以上),但是你的错误源于尝试指定或取消偏移(在4.3以上)。

也许你可以参考数组的长度,并做一些数学:
(阅读) ${arr[${#arr[@]}-1]}
(赋值) arr[${#arr[@]}-1]=last
(清除)未unset arr[${#arr[@]}-1]