数组
数组中可以存放多个值,shell中定义数组时不需要定义数组大小。
数组与字符串的区别
- 字符串就是一系列字符的组合
- 数组每个元素的分隔符一定是空格,而字符串不一定
数组的下标
数组元素的下标由 0 开始。
数组定义方法
方法一
数组名=(value0 value1 value2 ...)
定义字符串数组时,要用引号括起来。
数组包括的数据类型
- 数值类型
- 字符类型,用" "和' '定义
方法二
数组名=([0]=value0 [1]=value1 [2]=value2 ...)
此方法定义数组,可以跨下标赋值。
方式三
列表名="value0 value1 value2 ..."
数组名=($列表名)
方式四
数组名[0]="value"
数组名[1]-"value"
数组名[2]="value"
此方式也可以跨下标赋值,不必按顺序赋值。
数组元素的查看及修改
数组元素的查看
#查看数组中所有元素
${数组名[*]}或echo ${数组名[@]}
如果echo后直接跟数组名,只会输出其中第一个元素。
#查看数组中某一个元素,指定下标位置上的值
${数组名[下标]}
获取数组长度
${#数组名[*]}或echo ${#数组名[@]}
修改数组中的元素
数组名[下标]=value
补充
-
默认值替换,如果i有值,输出i;如果i为空值,则会输出:-后的值
-
判断是否包含空元素,判断数组长度减一下标是否为最后一个值
数组遍历
array1=(10 20 30 40 50)
for i in ${array1[*]}
do
echo $i
done
#将数组中的元素一次输出
实操:遍历数组中值求总和
数组切片(截取)
${数组名[@或*]:起始位置下标:长度}
数组替换
${数组名[@或*]/查找字符/替换字符}
该方式并不会替换数组原有内容。
想实现永久替换,将临时替换的赋给该数组名。
注意:数组的替换是字符的替换,包含相同字符的都会被替换
数组删除
#删除数组
unset 数组名[@或*]
#删除某个元素
unset 数组名[下标]
unset可以删除变量,也可删除某个数组,也可删除数组某个元素。
数组追加元素
方式一
数组名[下标]="value"
方式二
数组名[${#数组名[@或*]}]=value
该用法仅限于没有空元素的数组中
如果有空的元素,该方法只会修改其中一个元素。
方式三
数组名=("数组名[@]" value1 value2 ... )
双引号不能省略,否则,当数组中存在包含空格的元素时会按空格将元素拆分成多个。
不能将“@”替换为“*”,如果替换为“*”,不加双引号时与“@”的表现一致,加双引号时,会将数组中的所有元素作为一个元素添加到数组中。
方式四
数组名+={value1 value2 ...}
补充:字符串的添加
字符串通过+=也可实现添加的效果
但如果添加了let,就会变成整数运算
向函数传数组参数
如果将数组变量作为函数参数,函数只会取数组变量的第一个值。
需要先把获取的参数列表再定义成一个数组。
实操:将所有元素翻倍并输出