bash数组的用法

一、单纯数组

bash 复制代码
#!/usr/bin/env bash

#1、定义一个空数组
my_array=()

#2、增。使用 `+=` 运算符将元素添加到数组的末尾
my_array+=("value1")
my_array+=("value2")
my_array+=("value3")

#3、增。还可以使用一行的方式一次性添加多个元素到数组
my_array+=("value4" "value5" "value6")


#4、读。读取数组
echo ${my_array[1]}    # 输出:value2
echo ${my_array[*]}    # 输出:value1 value2 value3 value4 value5 value6
echo ${my_array[5]}    # 输出:value6

#5、读。使用 '#' 可以获取数组的长度
length=${#my_array[@]}
echo $length  # 输出:6


#6、读。使用 for 循环遍历数组元素并输出
for i in ${my_array[@]}; do
  echo $i
done

echo '-----------分割线1--------------'

#7、 读。可以使用 ':' 来定义数组的切片范围
slice=("${my_array[@]:2:4}")  # 获取从第3个开始切,切出来4个
echo "${slice[@]}"  # 输出:value3 value4 value5 value6

echo '-----------分割线2--------------'
#8、 删。使用 unset 命令删除指定索引上的元素
unset my_array[1]
echo ${my_array[*]}    # 输出:value1 value3 value4 value5 value6

echo '-----------分割线3--------------'
#9、改。将数组的第一个元素值改成hello world
my_array[0]="hello world"
echo "${my_array[*]} 长度:${#my_array[@]}"    # 输出:hello world value3 value4 value5 value6 长度:5
echo ${my_array[0]}    # 输出:hello world。 注意bash不会用空格来区分每个元素,只是显示的时候看起来好像是用空格区分每个元素

二、key & value 型数组

bash 复制代码
#!/usr/bin/env bash


# 定义一个关联数组
declare -A my_assoc_array
my_assoc_array["mykey1"]="value1"
my_assoc_array["key2"]="value2"
my_assoc_array["key3"]="value3"

echo ${my_assoc_array[@]}  #输出:value1 value3 value2
echo '--------'
# 修改关联数组中的元素
my_assoc_array["key2"]="new_value"

# 遍历关联数组,检查元素是否修改
for key in "${!my_assoc_array[@]}"; do
  echo "$key: ${my_assoc_array[$key]}"
done
#输出:
# mykey1: value1
# key3: value3
# key2: new_value


echo '--------'
echo ${my_assoc_array['key3']}  #输出:value3
# 注意不能使用索引来读取数据


echo '--------'
unset my_assoc_array["mykey1"]
echo ${my_assoc_array[@]}   #输出:value3 new_value
相关推荐
名字还没想好☜1 小时前
Go error 处理:errors.Is/As 与错误包装
开发语言·后端·golang·go·错误处理
红糖奶茶1 小时前
Python 中 while 循环计数异常的常见原因分析与正确搓搓
开发语言·python
Lucky_Turtle1 小时前
【论文写作】PDF图片不清晰,打印生成PDF空白大,PDF字体嵌入
开发语言·pdf·c#
csdndenglu1 小时前
Easy3D:一个轻量级、易用、高效的C++库,用于处理和渲染3D数据,无复杂要求时可替代VTK
开发语言·c++·图形渲染·3d渲染
byte轻骑兵2 小时前
【AVRCP】规范精讲[41]:AV/C指令帧解析,蓝牙遥控交互的底层语言
c语言·开发语言·人机交互·智能制造·avrcp
发光小北2 小时前
Bronze100系列plc Modbus及自由口通信案例
开发语言·php
snow@li2 小时前
Java:后端项目会有一个类似前端node_modules的目录吗 / jar包在本地仓库 ~/.m2/repository 中按版本共存
java·开发语言·前端
geovindu2 小时前
java: Builder Pattern
java·开发语言·后端·设计模式·建造者模式·生成器模式
HAPPY酷2 小时前
【ROS2】PyCharm 启动 Gazebo 仿真报错?从配置 Shell 到修复路径的全流程复盘
ide·chrome·pycharm
2zcode2 小时前
免费开源项目文档:基于MATLAB同态滤波的医学图像增强系统设计与实现
开发语言·matlab