数组:
存储多个元素的连续的内存空间,相当于多个变量的集合
数组索引:
数组的默认索引从零开始,用户可以自定义索引
数组声明:
declare -a 数组名
数组查看:
declare -a
数组赋值:
数组名=(关键字1 关键字2) 中间以空格隔开
数组名[索引号]="关键字"
数组名=([索引号]="关键字" [索引号]="关键字") 中间以空格隔开
数组应用:
${数组名[*]} 应用数组的所有变零
$(数组名[索引号]) 应用数组的指定变量
数组删除:
unset 数组名 删除整个数组
unset 数组名[索引号] 删除指定数组
数组切片:
${数组名[*]:n1 :n2} 隔n1个变量取出n2个变量
数组追加:
数组名[${#数组名[*]}]=变量
实例:
1:
[root@localhost app]# text=({1..5}) #数组的声明(默认declare -a)
[root@localhost app]# echo ${text[*]} #数组打印
1 2 3 4 5
[root@localhost app]# declare -a #查看所有数组 (可以用grep过滤指定数组)
declare -a BASH_ARGC='()'
declare -a BASH_ARGV='()'
declare -a BASH_LINENO='()'
declare -ar BASH_REMATCH='([0]="\$nam" [1]="\$" [2]="nam")'
declare -a BASH_SOURCE='()'
declare -ar BASH_VERSINFO='([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")'
declare -a DIRSTACK='()'
declare -a FUNCNAME='()'
declare -a GROUPS='()'
declare -a PIPESTATUS='([0]="0")'
declare -a name='()'
declare -a nmae='([0]="1" [1]="2" [2]="3")'
declare -a text='([0]="1" [1]="2" [2]="3" [3]="4" [4]="5")'
[root@localhost app]# unset text #数组删除
[root@localhost app]# declare -a #再次查看
declare -a BASH_ARGC='()'
declare -a BASH_ARGV='()'
declare -a BASH_LINENO='()'
declare -ar BASH_REMATCH='([0]="\$nam" [1]="\$" [2]="nam")'
declare -a BASH_SOURCE='()'
declare -ar BASH_VERSINFO='([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")'
declare -a DIRSTACK='()'
declare -a FUNCNAME='()'
declare -a GROUPS='()'
declare -a PIPESTATUS='([0]="0")'
declare -a name='()'
declare -a nmae='([0]="1" [1]="2" [2]="3")'
2:
[root@localhost app]# text=([2]=4 [4]=7) #数组稀疏赋值
[root@localhost app]# declare -a
declare -a BASH_ARGC='()'
declare -a BASH_ARGV='()'
declare -a BASH_LINENO='()'
declare -ar BASH_REMATCH='([0]="\$nam" [1]="\$" [2]="nam")'
declare -a BASH_SOURCE='()'
declare -ar BASH_VERSINFO='([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")'
declare -a DIRSTACK='()'
declare -a FUNCNAME='()'
declare -a GROUPS='()'
declare -a PIPESTATUS='([0]="0")'
declare -a name='()'
declare -a nmae='([0]="1" [1]="2" [2]="3")'
declare -a text='([2]="4" [4]="7")'
3:
[root@localhost app]# text=({1..3})
[root@localhost app]# echo ${text[*]} #原先数组
1 2 3
[root@localhost app]# text[${#text[*]}]=4 #数组追加
[root@localhost app]# echo ${text[*]}
1 2 3 4
4:数组切片的应用
.如下所示,实现转置矩阵matrix.sh
1 2 3 1 4 7
4 5 6 ===> 2 5 8
7 8 9 3 6 9
#!/bin/bash
f=({1..9})
#打印源矩阵
for ((i=0;i<9;i+=3));do
echo ${f[*]:$i :3}
done
echo "---------->>"
# 矩阵转变
for n in {0..2};do
for ((i=0;i<9;i+=3));do
echo -n "${f[*]:$i+$n :1} "
done
echo
done