如果分配了任何变量,则会自动创建索引数组 使用语法
name[subscript]=value
下标被视为必须的算术表达式 评估一个数字。如果下标的计算结果小于 零,它被用作一个大于数组的偏移量 最大索引(所以-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!
我做错了什么,或者网站是错误的,还是gnu bash与我在CentOS下运行的bash有什么不同?谢谢!
答案 0 :(得分:11)
如果你只想要最后一个元素
$ echo ${muh[*]: -1}
2
如果你想要最后一个元素
$ echo ${muh[*]: -2:1}
bleh
答案 1 :(得分:7)
根据Greg Wooledge's wiki(链接到bash更改日志),负面索引语法被添加到版本4.2 alpha中的bash。
答案 2 :(得分:3)
如果执行man bash
数组部分未列出此行为。它可能是bash中的新东西(gnu?)。
在CentOS 6.3(bash 4.1.2)
中失败了答案 3 :(得分:1)
使用Ubuntu 14.04 / GNU bash版本4.3.11(1),我的计算机上的负下标对我来说非常合适,但它返回:
line 46: [-1]: bad array subscript
当我尝试在4.2.46(1)上运行相同的脚本时。我
答案 4 :(得分:0)
旧的取景框(如最近Mac上的默认取景框)不支持负下标。除了接受的答案中使用的“子字符串扩展”之外,一种可能的解决方法是从括号内的数组开始计算所需的索引:
$ array=(one two three)
$ echo "${array[${#array[@]}-1]}"
three
使用这种方法,您可以将其他参数扩展操作打包到术语中,例如“删除匹配的前缀模式” th
:
$ echo "${array[${#array[@]}-1]#th}"
ree