Bash数组和否定的下标,是或否?

GNU bash手册告诉我

如果使用语法分配了任何variables,则会自动创build索引数组

name[subscript]=value 

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

所以我想我会试一试,得到以下结果:

 $ muh=(1 4 'a' 'bleh' 2) $ echo $muh 1 $ echo ${muh[*]} 1 4 a bleh 2 # so far so good so now I'll try a negative ... $ echo ${muh[-1]} -bash: muh: bad array subscript # didn't go as planned! 

我做错了什么,或者网站错了,或者是与在CentOS下运行的bash不同的gnu bash? 谢谢!

如果你只是想要最后一个元素

 $ echo ${muh[*]: -1} 2 

如果你想要在最后一个元素旁边

 $ echo ${muh[*]: -2:1} bleh 

根据Greg Wooledge的wiki (链接到bash changelog),在4.2版本的alpha版本中,负面的索引语法被添加到了bash中。

如果你man bash数组的部分不列出这种行为。 在bash中可能是新的(gnu?)。

在CentOS 6.3(bash 4.1.2)中失败

在Ubuntu 14.04 / GNU bash版本4.3.11(1)的电脑上,负下标对我来说工作得很好,但是它会返回:

 line 46: [-1]: bad array subscript 

当我尝试在4.2.46(1)上运行相同的脚本时。 一世