数组基本使用

声明

数组元素之间用空格来分隔

array_name=(value1 value2 …)

读取

${array_name[index]}

demo

  1. #!/bin/bash
  2. #第一种声明
  3. array_name=(1 2 "A")#Shell 是弱类型的,它并不要求所有数组元素的类型必须相同
  4. #下标方式声明数组
  5. #array_name[0]=value0
  6. echo "第一个元素为: ${array_name[0]}"
  7. echo "第二个元素为: ${array_name[1]}"
  8. echo "第三个元素为: ${array_name[2]}"
  9. #执行脚本,输出结果如下所示:
  10. #第一个元素为: 1
  11. #第二个元素为: 2
  12. #第三个元素为: A

注:Bash Shell 只支持一维数组,不支持多维数组。

删除数组元素

使用 unset 关键字来删除数组元素,具体格式如下:

unset array_name[index]

如果不写下标,而是写成下面的形式:

unset array_name

那么就是删除整个数组,所有元素都会消失。

下面我们通过具体的代码来演示:

#!/bin/bash
arr=(23 56 99 "Eden")

unset arr[1]
echo ${arr[@]}

#输出结果:
#23 99 Eden

unset arr
echo ${arr[*]}

#输出结果(该结果为空):
#


获取数组中的所有元素

#!/bin/bash

array_name[0]=1
array_name[1]=2
array_name[2]=3

echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"

#输出结果
#数组的元素为: 1 2 3
#数组的元素为: 1 2 3

获取数组的长度

#!/bin/bash
array_name[0]=1
array_name[1]=2
array_name[2]=3

echo "${#array_name[*]}"
echo "${#array_name[@]}"

#输出结果
#3
#3

数组拼接

拼接数组的思路是:先利用@*,将数组扩展成列表,然后再合并到一起。具体格式如下:

array_name=(${array1[@]} ${array2[@]}) array_name=(${array1[]} ${array2[]})

下面我们通过具体的代码来演示:

#!/bin/bash

array1=(23 56)
array2=(99 "Eden")
array3=(${array1[@]} ${array2[*]})
echo ${array3[@]}  #也可以写作 ${array3[*]}

#运行结果:
#23 56 99 Eden

关联数组

定义关联数组

declare -A array_name

给关联数组赋值

方法1

array_name=([index1]=val1 [index]=val2)

方法2

array_name[index1]=val1 array_name[index2]=val2

Demo

#!/bin/bash

declare -A color
color["red"]="#ff0000"
color["green"]="#00ff00"
color["blue"]="#0000ff"
color["white"]="#ffffff"
color["black"]="#000000"

#获取所有元素值
for value in ${color[*]}
do
    echo $value
done

echo "****************"

#获取所有元素下标(键)
for key in ${!color[*]}
do
    echo $key
done

echo "****************"

#列出所有键值对
for key in ${!color[@]}
do
    echo "${key} -> ${color[$key]}"
done

运行结果:

ff0000

0000ff

ffffff

000000

00ff00


red blue white black green


red -> #ff0000 blue -> #0000ff white -> #ffffff black -> #000000 green -> #00ff00