bash 支持一维数组,不支持多维数组。并且没有限定数组长度(不建议数组太长或下标非连续)。
数组元素的下标以 0 开始,获取元素要利用下标,下标可以是整数或算术表达式,其值应大于等于 0。
定义数组
- 直接定义,
array=(1 2 3 4 5)
,定义数组需要使用()
圆括号,每个元素之间用空格隔开。 - 依次赋值,
array[0]=1; array[3]=4
,数组的下标可以不连续,并且下标的范围没有限制。 - 如果数组元素包含空白符,请用引号括起来,如:
array=('foo bar baz' 'hello world')
。
访问数组
echo ${array[0]}
,使用给定下标,整数形式;echo ${array[1 - 1]}
,使用算数表达式,支持+ - * / % **
加减乘除、取余、乘方;ind=0; echo ${array[ind]}
,使用变量,变量值须为大于等于 0 的整数,并且不需要加$
。
所有元素
echo ${array[@]}
,每个元素都作为单独参数传递,元素几个参数就几个echo ${array[*]}
,使用空格连接各元素(concat),作为一个字符串参数传递- 当然,一般情况下是体现不出差异的;但与双引号一起使用时,会表现得不一样
test.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
arr=(1 2 3 4 5)
for i in "${arr[@]}"; do
echo $i
done
echo "------------"
for i in "${arr[*]}"; do
echo $i
done
执行结果
1
2
3
4
5
6
7
8
$ ./test.sh
1
2
3
4
5
------------
1 2 3 4 5
数组长度
echo ${#arr[@]}
、echo ${#arr[*]}
都可以,获取元素个数echo ${#arr[idx]}
获取下标为idx
的元素(字符串)的长度