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

时间:2018-12-12 13:54:19

标签: arrays bash variables expansion

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

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

然后可以这样说,例如,JOB2:

${JOBS[1]}

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

JOB="XYZ"

在脚本的后面,此变量的含义如下:

${JOB[0]}

和:

${JOB[1]}

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

这仅仅是编程错误吗?还是有一些我不知道的关于正常变量的构造?

2 个答案:

答案 0 :(得分:3)

bash根本没有数组值;它提供了数组 syntax ,可用于设置了array属性的名称:

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

输出中的-a表示array属性是在a上设置的,它是由前面的数组分配隐式设置的。

对于此类变量,name-plus-index充当一种“虚拟”名称,并且与任何其他名称一样,如果该名称实际上不存在,则扩展为空字符串,例如{{ 1}}。该实现的副作用是${JOB[1]}$foo通常等效,无论${foo[0]}是否设置了数组属性。

答案 1 :(得分:0)

我相信Bash的较新版本支持一维数组,并且可以在以下链接中看到以下语法: Advanced Bash-Scripting Guide

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