在 Shell 中数组仅支持一维数组,数组元素的下标从 0 开始,数组元素没有最大限制
变量是存储单个数据的单元,其在内存中是随机存储的,数组是存储一系列数据的集合,是事先在内存中开辟连续的一系列空间,之后将数组元素有序的存储在其中。
1、数组定义
1、直接定义:数组类似于变量定义,只不过将里面的值用小括号括起来,其中每个元素使用空格分割。Shell 是弱类型的,数组中元素的类型可以不一样,例如其中可以包含数字与字符串
2、单元素定义:Shell 中数组下标从 0 开始,利用单个元素来定义数组。
# 直接定义ARG=(1 2 3 "hello Shell")# 单元素定义ARG[0]=1ARG[1]=2ARG[2]=3ARG[3]="hello Shell"
2、元素获取
1、单元素获取:${ARG[index]}
2、全部元素获取:${ARG[]}、${ARG[@]}
3、获取数组全部下标:${!ARG[]}、${!ARG[@]}
4、获取数组长度:${#ARG[*]}、${#ARG[@]}
# 单元素获取zhangl@zhangl-PC:~/code/shell$ ARG1=(1 2 3 "shell")zhangl@zhangl-PC:~/code/shell$ echo ${ARG1[2]}3# 获取全部元素zhangl@zhangl-PC:~/code/shell$ echo ${ARG1[*]}1 2 3 shellzhangl@zhangl-PC:~/code/shell$ echo ${ARG1[@]}1 2 3 shell# 获取数组全部下标zhangl@zhangl-PC:~/code/shell$ echo ${!ARG1[*]}0 1 2 3zhangl@zhangl-PC:~/code/shell$ echo ${!ARG1[@]}0 1 2 3# 获取数组长度zhangl@zhangl-PC:~/code/shell$ echo ${#ARG1[*]}4zhangl@zhangl-PC:~/code/shell$ echo ${#ARG1[@]}4# 获取单个元素的长度zhangl@zhangl-PC:~/code/shell$ echo ${#ARG1[3]} # shell5
3、元素修改
4、数组切片
返回值为字符串 格式:${ARG[@或*]:start_index:length}
echo ${ARG[@]:1:2}2 3
5、数组替换
替换数组的元素,返回新数组的所有值。格式:${ARG[@]/index/new_value}
echo ${ARG[@]/2/10}1 10 3 shell
6、数组分类
1、普通数组:数字下标的数组
2、关联数组:以字符串为下标的数组。使用前必须先使用 declare -A 声明
zhangl@zhangl-PC:~/code/shell$ declare -A ARGFILE # 声明关联数组zhangl@zhangl-PC:~/code/shell$ ARGFILE=([name]=shell [age]=23 [sex]=女 [addr]=天津 [city]=和平区) # 关联数组赋值zhangl@zhangl-PC:~/code/shell$ echo ${ARGFILE[@]}和平区 天津 女 23 shellzhangl@zhangl-PC:~/code/shell$ echo ${ARGFILE[*]}和平区 天津 女 23 shellzhangl@zhangl-PC:~/code/shell$ echo ${ARGFILE[addr]}天津
