概述
- 为什麽会产生Shell数组?
通常在开发Shell脚本时,定义变量采用的形式为“a=l;b=2;C=3”,可如果有多个 变量呢?这时再逐个地定义就会很费劲,并且要是有多个不确定的变量内容,也会难以 进行变量定义,此外,快速读取不同变量的值也是一件很痛苦的事情,于是数组就诞生 了,它就是为了解决上述问题而出现的。 - 什麽是Shell数组?
Shell的数组就是一个元素集合,它把有限个元素(变量或字符内容)用一个名字来 命名,然后用下标编号对它们进行区分。这个名字就称为数组名,用于区分不同内容的编 号就称为数组下标。组成数组的各个元素(变量)称为数组的元素,有时也称为下标变量。
数组的声明
怎样声明一个数组变量?假设数组的变量名为array。
- 直接赋值(根据数组的下标编号进行赋值)
array[0]="a"
array[1]="b"
array[3]="c"
- 结合关键字declare 进行声明
declare -a array
- 小括号空格法(最常用)
array=("a" "b" "c")
- 引号空格法
array="a b c d e"
- 混合法
array=([0]="a" [1]="b" [2]="c")
数组的长度
在shell中如何获取数组的长度?假设数组的变量名为array。
#获取整个数组的长度
echo ${#array[@]}
echo ${#array[*]}
------------------------------------------------------------------------------
# 获取数组单个元素的长度(i表示数组元素的下标)
echo ${#array[i]}
数组的值
在shell中如何获取数组的值?假设数组的变量名为array。
#获取数组某个下标(元素)的值:
echo ${array[i]}
------------------------------------------------------------------------------
#获取整个数组(即所有元素)的值:
echo ${array[@]}
数组的遍历
在shell中如何遍历一个数组?假设数组的变量名为array。
- 标准for循环
for ((i=0;i<=${#array[@];i++}))
do
echo ${array[i]}
done
- for…in…循环
for value in ${array[@]}
do
echo ${value}
done
数组的删除
#删除数组中的某个元素;其中i表示数组元素的下标
unset array[i]
------------------------------------------------------------------------------
#删除整个数组
unset array
将命令的结果赋值给数组
file_array=(`ls`) 或者 file_array=($(ls))
数组的切片(数组的提取)
#定义一个数组array
array=("a" "b" "c" "d" "e" "f")
#获取数组的长度
[ yuki@myhost ~ ] echo ${#array[@]}
6
[ yuki@myhost ~ ] echo ${#array[*]}
6
#获取数组下标为1的元素的值
[ yuki@myhost ~ ] echo ${array[1]}
b
#获取数组的所有值
[ yuki@myhost ~ ] echo ${array[@]}
a b c d e f
#从数组下标为n开始切片到下标为m的地方,包前n下标的值不包后m下标的值
# 语法:echo ${array[@]:n:m}
[ yuki@myhost ~ ] echo ${array[@]:0:3}
a b c
[ yuki@myhost ~ ] echo ${array[@]:0:4}
a b c d
#从数组下标为m开始切片到数组末尾,包括m下标的值
# 语法:echo ${array[@]:m}
[ yuki@myhost ~ ] echo ${array[@]:1}
b c d e f
[ yuki@myhost ~ ] echo ${array[@]:5}
f