速查
操作 | 命令 | 作用 |
---|---|---|
创建数组 | declare -a array1=‘([2]=“zhangfei”)’ | 逐个元素定义数组 |
array2=(sunquan zhouyu “lu su”) | 从列表定义数组 注意括号就相当于数组的定义 | |
array3=(`cat /etc/user_name.txt`) | 从文件定义数组 | |
array1+=(value1) array1+=(value1,value2…valueN) array1+=(${var1}) | append【+=】方式创建数组,注意加括号() | |
删除 | unset array1[0] | 删除元素:unset 数组名[索引] |
unset array1 | 删除数组:unset 数组名 | |
打印数组内容 | echo ${array1[@]} | 打印所有值 |
echo ${array1[0]} | 打印单个值 | |
echo ${array1[@]:2:2} | ${数组名[@]:M:N} 打印多个值,打印下标M开始的N个元素 此处就是下标2开始的2个元素 | |
echo ${#array1[@]} | 统计数组元数的个数 | |
echo ${!array1[@]} | 获取数组的索引(也就是 key) | |
for i in “${array1[*]}”; do echo $i; done | 遍历数组 | |
数组追加元素 | array_name+=(value1…valueN) | 使用+=进行追加 常用! |
array_name[index]=value | 直接使用下标进行元素的追加 | |
array_name[${#array_name[@]}]=value | 将数组的长度作为下标进行追加元素 (因为数组下标从0开始,目前数组长度是无值的) | |
数组重新赋值 | array_name=(“${array_name[@]}” value1 …valueN) | > 双引号不能省略,否则,当数组array name中存在包含空格的元素时会按空格将元素拆分成多个 > 不能将“@”替换为 “ * ”,如果替换为“ * ”,不加双引号时与"@"的表现一致,加双引号时,会将数组array name中的所有元素作为一个元素添加到数组中 |
数组创建与删除
# 1. 逐个元素定义数组# 说明:不必从0开始定义,会自动按索引排序。array1[3]=zhangfei# declare -a 查看所有数组# declare -a |grep array 查看刚定义的数组declare -a array1='([2]="zhangfei")'# 2. 从列表定义数组 注意括号就相当于数组的定义array2=(sunquan zhouyu "lu su")# 3. 从文件定义数组array3=(`cat /etc/user_name.txt`)# 4. append【+=】方式创建数组,注意加括号()array1+=(value1)array1+=(value1,value2...valueN)array1+=(${var1})# 5. 删除元素# 删除元素:unset 数组名[索引]unset array1[0]# 删除数组:unset 数组名unset array1
打印数组内容(数量,key 等)
访问数组中的单个元素:
- 语法:
${数组名[索引]}
访问数组中多个元素(切片):
- 语法:
${数组名[@]:M:N}
# 1. 打印所有值echo ${array1[@]}liubei guanyu zhangfei# 2. 打印单个值echo ${array1[0]}liubei# 3. 打印多个值,切片(数组下标也是从0开始,此处表示【打印从下标1开始2个元素(也就当前和后一个)】)echo ${array1[@]:1:2}guanyu zhangfei# 4. 统计数组元数的个数echo ${#array1[@]}3# 注意:即使是从索引1开始取数,仍然会显示总数。测试如下:echo ${#array1[@]:1}3# 5. 获取数组的索引(也就是 key)echo ${!array1[@]}0 1 3# 6. 遍历数组[root@localhost data]#for i in "${a[*]}"; do echo $i; done5 3 45 99
数组追加元素
# 1. 方法一 :直接使用下标进行元素的追加array_name[index]=value# 2. 方法二:将数组的长度作为下标进行追加元素 (因为数组下标从0开始,目前数组长度是无值的)array_name[${#array_name[@]}]=value# 3. 方法三:重新赋值> 双引号不能省略,否则,当数组array name中存在包含空格的元素时会按空格将元素拆分成多个> 不能将“@”替换为 “ * ”,如果替换为“ * ”,不加双引号时与"@"的表现一致,加双引号时,会将数组array name中的所有元素作为一个元素添加到数组中array_name=("${array_name[@]}" value1 ...valueN)# 4. 方法四:使用+=进行追加 常用!array_name+=(value1...valueN)
使用示例
#!/bin/bash echo "shell定义字典"#必须先声明declare -A dicdic=([key1]="value1" [key2]="value2" [key3]="value3") #打印指定key的valueecho ${dic["key1"]}#打印所有key值echo ${!dic[*]}#打印所有valueecho ${dic[*]} #遍历key值for key in $(echo ${!dic[*]})do echo "$key : ${dic[$key]}"done echo "shell定义数组" #数组list=("value1" "value2" "value3")#打印指定下标echo ${list[1]}#打印所有下标echo ${!list[*]}#打印数组下标echo ${list[*]}#数组增加一个元素list=("${list[@]}" "value3")
误区注意
数组不是单纯的数组,可以视为【字典】和【数组】的结合
array1[3]=zhangfei
中的 【3】只能是视作 key,不具有排序作用array1+="test"
新增元素,并没有放到array1[4]
位置,而是补齐之前的空位,补到了array1[0]
- 数组会自动对新加入的元素进行排序,会忽略空闲位置
echo ${array1[@]:0:2}
,可以看到了打印对应的元素内容test zhangfei
append【+=】方式创建数组,注意加括号()
# 创建数组$ array1[3]=zhangfei# 查看刚创建的数组$ declare -a | grep arraydeclare -a array1='([3]="zhangfei")'# 可以到定义的 3 只是 key,与数组无关,数组会【自动排序】$ echo ${array1[@]:1:2}zhangfei$ echo ${array1[@]:1:1}zhangfei# 数组新增元素$ array1+="test"# 可以看到新增的元素 被赋予一个 key 为 0 $ declare -a | grep arraydeclare -a array1='([0]="test" [3]="zhangfei")'# 查看数组的长度$ echo ${#array1[@]}2# 查看数据的key 相当于查看 dict 的 key$ echo ${!array1[@]}0 3# 可以看到 没找到新增的元素$ echo ${array1[@]:1:1}zhangfeiecho ${array1[@]:1:3}zhangfei# 查看数组位置 可以看到新增的元素 加到 0 位置$ declare -a | grep arraydeclare -a array1='([0]="test" [3]="zhangfei")'$ echo ${array1[@]:0:1}test$ echo ${array1[@]:0:2}test zhangfei$ ip1=10.10.10.1$ ip2=20.20.20.2# 此处是直接 增添元素 创建数组$ ips+=${ip1}# 但查找不到$ declare -a | grep ips$ echo ${ips[@]}10.10.10.1$ ips+=${ip2}# 同时打印全部 没有空格进行间隔$ echo ${ips[@]}10.10.10.120.20.20.2# 可以看到全都存储在 key 为 0 中$ echo ${ips[0]}10.10.10.120.20.20.2# 获取全部 key$ echo ${!ips[@]}0# 注意加括号# 首先删除数组$ unset ips# 加括号方式创建$ ips+=(${ip1})$ ips+=(${ip2})$ declare -a | grep ipsdeclare -a ips='([0]="10.10.10.1" [1]="20.20.20.2")'$ echo ${!ips[@]}0 1$ echo ${ips[0]}10.10.10.1
来源地址:https://blog.csdn.net/qq_24433609/article/details/128133275