bob*_*nto 12 unix linux arrays bash gnu
在GNU bash的手册告诉我
如果使用语法分配任何变量,则会自动创建索引数组
Run Code Online (Sandbox Code Playgroud)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!
Run Code Online (Sandbox Code Playgroud)
我做错了什么,或者网站是错误的,还是gnu bash与我在CentOS下运行的bash有什么不同?谢谢!
小智 13
如果你只想要最后一个元素
$ echo ${muh[*]: -1}
2
Run Code Online (Sandbox Code Playgroud)
如果你想要最后一个元素
$ echo ${muh[*]: -2:1}
bleh
Run Code Online (Sandbox Code Playgroud)
Bash beore 4.2(就像现在 Mac 上的默认版本一样)不支持负下标。除了接受的答案中使用的“子字符串扩展”之外,一个可能更干净的解决方法是从括号内的数组开始计算所需的索引:
$ array=(one two three)
$ echo "${array[${#array[@]}-1]}"
three
Run Code Online (Sandbox Code Playgroud)
通过这种方法,您可以将其他参数扩展操作打包到术语中,例如“删除匹配的前缀模式” th
:
$ echo "${array[${#array[@]}-1]#th}"
ree
Run Code Online (Sandbox Code Playgroud)