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 - 两者相同。
我知道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 - 两者相同。