Shell系列(4) - shell数组

223 阅读2分钟

「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[*]}