「4月日新计划更文活动」
什么是数组?
- 数值是指有序的元素序列,由相同类型数据的有序集合
shell数组特点
- shell并没有限制数组的大小,理论上可以存放无限的数据
- shell数组元素的下标也是从0开始计数
- 获取数组中的元素要使用
[],下标参数可以是整数,也可以是一个结果为整数的表达式 - 下标必须大于等于 0
- shell只支持一组数组,不支持多维度数组
数组的定义
- 括号来表示数组,数组元素用“空格"符号分割
- 语句格式:
数组名 = (值1 值2 ... 值n) - 注意:shell是弱类型,它并不要求所有数组元素的类型必须相同
key_name=(value0 value1 value2 value3)
echo ${key_name[*]}
echo ${key_name[@]}
#可以单独设置数组的每个值
key_name[0]=value0
key_name[3]=value2
key_name[7]=value6
echo ${key_name[*]}
echo ${key_name[@]}
#也可以这样表示
key_name=([3]=value2 [8]=value7 [10]=value9)
echo ${key_name[*]}
echo ${key_name[@]}
获取数组的长度
- 用于获取当前数组的长度,获取数组长度的方法与获取字符串长度的方法相同
- 用
@或者*,可以将数组扩展成列表 - 语句格式如下:
key_name=(value0 value1 value2 value3)
# 获取当前数组元素的个数
echo length=${#key_name[@]}
echo length=${#key_name[*]}
获取指定元素的长度
- 获取指定元素的长度时候,可以通过下标的方式实现
- 注意:数组下标索引 从0开始
key_name=(value0 value1 value2 value3 won)
echo length=${#key_name[@]}
# 获取key_name中的第四个元素
echo length=${#key_name[4]}
读取数组
读取数组中指定元素的值
- 读取数组中指定元素的值
- 语句格式:
${array_name[index]},其中 "index"是数组中元素的索引值,它指定要访问的数组元素的位置。数组索引从0开始
array_name=(value0 value1 value2 value3 won)
# 样例语句: ${array_name[index]}
echo ${array_name[0]}
获取数组中的所有元素
- 使用
@或*可以获取数组中的所有元素
array_name=(value0 value1 value2 value3 won)
echo ${array_name[*]}
echo ${array_name[@]}
删除数组
- 用于删除数组元素
unset array_name[index]
参数说明:
array_name :表示为组名
index : 表示数组下标
key_name=(value0 value1 value2 value3)
unset key_name[3]
echo ${key_name[@]}
关联数组
- 所谓的关联数组,就是使用任意的字符串,或者整数作为下标来访问数组元素
declare -A array_name
参数说明:
-A 选项:用于声明一个关联数组
- 注意:关联数组的键是唯一的
declare -A key_name=(["baidu"]="www.baidu.com" ["taobao"]="www.taobao.com" ["google"]="www.google.com")
echo ${!key_name[*]}
echo ${key_name[*]}
#也可以先关联数组,在设置键和值
declare -A key_name
key_name["baidu"]="www.baidu.com"
keyname["taobao"]="www.taobao.com"
keyname["google"]="www.google.com"
echo ${!key_name[@]}
echo ${key_name[@]}
获取数组中的键值
- 在数组前加一个
!可以获取数组的所有键
${!key_name[*]}
${!key_name[*]}
declare -A key_name=(["baidu"]="www.baidu.com" ["taobao"]="www.taobao.com" ["google"]="www.google.com")
echo ${!key_name[*]}