shell 数组一般都是一维数组。
1. 数组的声明
declare -a arr
- 该命令将声明一个数组arr,实际上不声明也可以直接定义数组。
2. 数组的初始化
-
arr=(1 2 3)
:该命令定义了一个数组,可以不指明长度。元素之间用空格隔开。 -
arr=([index1]=val1 [index2]=val2 ... [indexn]=valn)
:利用数组下表定义数组。 -
read -a array
:从命令行中读入数组。
3. 数组信息的获取
-
${arr[index]}
:读取数组中下标为index
的元素。 -
${arr[@/*]}
:读取arr
的所有元素。@
和*
都是所有的意思。 -
${#arr[@/*]}
:arr
中的元素个数,#代表数目。
4. 数组元素的更新
-
arr[index]=x
:将下标为index
的数组元素更新为x
,如果index
对应元素不存在,则在相应index
位置添加元素x
。 -
arr=(x y .. z)
:将数组重新定义,覆盖原数组。
5. 数组的删除
-
unset arr
:删除整个arr
数组。 -
unset arr[index]
:删除arr
中下标为index
的数组元素。
6. 数组切片
-
${arr[@]:start:end}
:将数组从下标为start
至end
切片,返回值为字符串类型,元素之间以空格符分隔。 -
arr_new="(${arr[@]:start:end})"
:将数组切片后赋给新的数组变量,切片以后对返回字符串左右加上括号即构成了新的数组。
7. 数组元素替换
-
${arr[@]/原元素x/替换元素y}
:将数组中所有原元素x
替换为替换元素y
,返回一个新的替换后的数组,并不改变原值。 -
arr=${arr[@]/x/y}
:替换元素后覆盖原数组,改变原数组。 -
arr_new=${arr[@]/x/y}
:将修改后的数组赋给一个新数组,原数组内容不变。
8. 数组的遍历操作
for i in "${array[@]}"
do
#access each element as $i. . .
done-
for
循环遍历数组。
9. 模拟二维数组
-
matrix[i][j]=array[n*i+j]
:通过一维数组模拟二维数组,按行顺序存储。