创建一个简单的bash堆栈脚本后,我遇到了与bash数组相关的错误。
来自Bash手册:
如果使用以下语法分配任何变量,则将自动创建索引数组:
name[subscript]=value name[subscript]=value。下标被视为必须评估为数字的算术表达式。如果下标评估为小于零的数字,则将其用作从大于数组最大索引的1开始的偏移量(因此,下标为-1是指数组的最后一个元素)。
在我的本地机器上一切都很完美,但不幸的是我的服务器环境略有不同。
负下标在Ubuntu 14.04 / GNU bash版本4.3.11(1)上运行得很好。但是,当我尝试在GNU bash版本4.2.46(1)的服务器上运行相同的脚本时,遇到了以下错误:
来自Bash手册:
如果使用以下语法分配任何变量,则将自动创建索引数组:
name[subscript]=value name[subscript]=value。下标被视为必须评估为数字的算术表达式。如果下标评估为小于零的数字,则将其用作从大于数组最大索引的1开始的偏移量(因此,下标为-1是指数组的最后一个元素)。
在我的本地机器上一切都很完美,但不幸的是我的服务器环境略有不同。
负下标在Ubuntu 14.04 / GNU bash版本4.3.11(1)上运行得很好。但是,当我尝试在GNU bash版本4.2.46(1)的服务器上运行相同的脚本时,遇到了以下错误:
line 46: [-1]: bad array subscript
我试图创建一个数组并直接从终端调用最后一个元素(不在脚本内部),它成功了:
user@local:~$ arr=( 1 2 3 4 5 )
user@local:~$ echo ${arr[-1]}
5
我有点困惑。这个问题有没有解决方案或变通方法?
array[arrayLength - 1]
- Ludifunction stateMachine.pop() { : ${1? '缺少属性名'} local attribute="${1}"; local arrayName=STATE_MACHINE_${attribute}; # if [[ ! $( stateMachine.exist "${arrayName}" ) == 0 ]]; then local arrayLength=${#"${arrayName}"[@]};unset "${arrayName}[$arrayLength-1]"; fi }
- dlamblinline 46: ${#{arrayName}[@]}: bad substitution
我不知道为什么会这样,但我会继续尝试! - Ludi