创建一个简单的bash堆栈脚本后,我遇到了与bash数组相关的错误。
来自Bash手册:
如果分配了任何变量,则会自动创建索引数组 使用语法:
NullPointerException
name [subscript] = value下标被视为算术 必须评估为数字的表达式。如果下标评估为a 数字小于零,它用作一个大于的偏移量 数组的最大索引(所以-1的子标点指的是最后一个 数组元素。)
在本地计算机上一切都运行得很好,遗憾的是我的服务器环境略有不同。
负面的下标适用于Ubuntu 14.04 / GNU bash版本4.3.11(1)。但是,当我尝试使用GNU bash版本4.2.46(1)在我的服务器上运行相同的脚本时,我遇到了以下错误:
name[subscript]=value
我尝试创建一个数组并直接从终端调用最后一个元素(不在脚本中)并且它有效:
line 46: [-1]: bad array subscript
我有点困惑。这有什么解决方案或解决方法吗?
答案 0 :(得分:2)
猜猜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]