Bash-脚本:如果 VARIABLE 不是数组,${VARIABLE[number]} 是什么意思?

Bash-Scripting: what does ${VARIABLE[number]} mean if VARIABLE is not an array?

我知道bash脚本中有数组。例如:

JOBS=("JOB1", "JOB2", "JOB3")

然后可以参考,比方说,JOB2如下:

${JOBS[1]}

在一个 bash 脚本中我最近遇到了一个普通的(非数组)变量:

JOB="XYZ"

稍后在脚本中,此变量被引用如下:

${JOB[0]}

和:

${JOB[1]}

由于JOB不是数组,我不明白${JOB[number]}扩展成什么。

这只是一个编程错误吗?或者是否有一些我不知道的关于普通变量的构造?

bash 根本没有数组值;它提供数组 syntax 以与具有 array 属性集的名称一起使用:

$ a=()
$ declare -p a
declare -a a=()

输出中的 -a 表示 array 属性设置在 a 上,已由前面的数组赋值隐式设置。

对于此类变量,名称加索引充当一种 "virtual" 名称,并且与任何其他名称一样,如果该名称实际上不存在,则会扩展为空字符串,就像${JOB[1]} 的案例。实施的副作用是 $foo${foo[0]} 通常是等效的,无论 foo 是否设置了数组属性。

我相信 Bash 的较新版本支持一维数组,语法如下 link 所示: Advanced Bash-Scripting Guide

如果 Variable 不是数组,${Variable[Number]} 将仅适用于 Number=0 但不适用于任何其他数字,因为 ${Variable[0]} 和 $Variable - 两者相同。