在 Shell 中数组仅支持一维数组,数组元素的下标从 0 开始,数组元素没有最大限制
变量是存储单个数据的单元,其在内存中是随机存储的,数组是存储一系列数据的集合,是事先在内存中开辟连续的一系列空间,之后将数组元素有序的存储在其中。

1、数组定义

1、直接定义:数组类似于变量定义,只不过将里面的值用小括号括起来,其中每个元素使用空格分割。Shell 是弱类型的,数组中元素的类型可以不一样,例如其中可以包含数字与字符串
2、单元素定义:Shell 中数组下标从 0 开始,利用单个元素来定义数组。

  1. # 直接定义
  2. ARG=(1 2 3 "hello Shell")
  3. # 单元素定义
  4. ARG[0]=1
  5. ARG[1]=2
  6. ARG[2]=3
  7. ARG[3]="hello Shell"

2、元素获取

1、单元素获取:${ARG[index]}
2、全部元素获取:${ARG[]}、${ARG[@]}
3、获取数组全部下标:${!ARG[
]}、${!ARG[@]}
4、获取数组长度:${#ARG[*]}、${#ARG[@]}

  1. # 单元素获取
  2. zhangl@zhangl-PC:~/code/shell$ ARG1=(1 2 3 "shell")
  3. zhangl@zhangl-PC:~/code/shell$ echo ${ARG1[2]}
  4. 3
  5. # 获取全部元素
  6. zhangl@zhangl-PC:~/code/shell$ echo ${ARG1[*]}
  7. 1 2 3 shell
  8. zhangl@zhangl-PC:~/code/shell$ echo ${ARG1[@]}
  9. 1 2 3 shell
  10. # 获取数组全部下标
  11. zhangl@zhangl-PC:~/code/shell$ echo ${!ARG1[*]}
  12. 0 1 2 3
  13. zhangl@zhangl-PC:~/code/shell$ echo ${!ARG1[@]}
  14. 0 1 2 3
  15. # 获取数组长度
  16. zhangl@zhangl-PC:~/code/shell$ echo ${#ARG1[*]}
  17. 4
  18. zhangl@zhangl-PC:~/code/shell$ echo ${#ARG1[@]}
  19. 4
  20. # 获取单个元素的长度
  21. zhangl@zhangl-PC:~/code/shell$ echo ${#ARG1[3]} # shell
  22. 5

3、元素修改

删除元素使用 unset unset $ARG[0]

4、数组切片

返回值为字符串 格式:${ARG[@或*]:start_index:length}

  1. echo ${ARG[@]:1:2}
  2. 2 3

5、数组替换

替换数组的元素,返回新数组的所有值。格式:${ARG[@]/index/new_value}

  1. echo ${ARG[@]/2/10}
  2. 1 10 3 shell

6、数组分类

1、普通数组:数字下标的数组
2、关联数组:以字符串为下标的数组。使用前必须先使用 declare -A 声明

  1. zhangl@zhangl-PC:~/code/shell$ declare -A ARGFILE # 声明关联数组
  2. zhangl@zhangl-PC:~/code/shell$ ARGFILE=([name]=shell [age]=23 [sex]=女 [addr]=天津 [city]=和平区) # 关联数组赋值
  3. zhangl@zhangl-PC:~/code/shell$ echo ${ARGFILE[@]}
  4. 和平区 天津 23 shell
  5. zhangl@zhangl-PC:~/code/shell$ echo ${ARGFILE[*]}
  6. 和平区 天津 23 shell
  7. zhangl@zhangl-PC:~/code/shell$ echo ${ARGFILE[addr]}
  8. 天津