6.7 Arrays
Bash provides one-dimensional array variables. Any variable may be used as
an array; the declare
builtin will explicitly declare an array.
There is no maximum
limit on the size of an array, nor any requirement that members
be indexed or assigned contiguously. Arrays are zero-based.
An array is created automatically if any variable is assigned to using
the syntax
name[subscript]=value
The subscript
is treated as an arithmetic expression that must evaluate to a number
greater than or equal to zero. To explicitly declare an array, use
declare -a name
The syntax
declare -a name[subscript]
is also accepted; the subscript is ignored. Attributes may be
specified for an array variable using the declare
and
readonly
builtins. Each attribute applies to all members of
an array.
Arrays are assigned to using compound assignments of the form
name=(value1 ... valuen)
where each
value is of the form [[subscript]=]
string. If
the optional subscript is supplied, that index is assigned to;
otherwise the index of the element assigned is the last index assigned
to by the statement plus one. Indexing starts at zero.
This syntax is also accepted by the declare
builtin. Individual array elements may be assigned to using the
name[
subscript]=
value syntax introduced above.
Any element of an array may be referenced using
${name[
subscript]}
.
The braces are required to avoid
conflicts with the shell's filename expansion operators. If the
subscript is '@' or '*', the word expands to all members
of the array name. These subscripts differ only when the word
appears within double quotes. If the word is double-quoted,
${name[*]}
expands to a single word with
the value of each array member separated by the first character of the
IFS
variable, and ${name[@]}
expands each element of
name to a separate word. When there are no array members,
${name[@]}
expands to nothing. This is analogous to the
expansion of the special parameters '@' and '*'.
${#name[
subscript]}
expands to the length of
${name[
subscript]}
.
If subscript is '@' or
'*', the expansion is the number of elements in the array.
Referencing an array variable without a subscript is equivalent to
referencing element zero.
The unset
builtin is used to destroy arrays.
unset
name[subscript]
destroys the array element at index subscript.
unset
name, where name is an array, removes the
entire array. A subscript of '*' or '@' also removes the
entire array.
The declare
, local
, and readonly
builtins each accept a -a
option to specify an array. The read
builtin accepts a -a
option to assign a list of words read from the standard input
to an array, and can read values from the standard input into
individual array elements. The set
and declare
builtins display array values in a way that allows them to be
reused as input.