shell数组基础

Shell数组是存储多个值的数据结构,支持索引数组(数字下标)和关联数组(字符串键),常用于批量处理数据。以下是核心知识点及操作示例:


🔢 ​​1. 数组定义与分类​

  • ​索引数组​​:下标从0开始,元素用空格分隔。 array=("apple" "banana" "cherry") # 直接定义 array[0]="apple" # 逐个赋值
  • ​关联数组​​(Bash 4.0+):需先声明,键值对形式。 declare -A assoc_arr # 声明 assoc_arr=([id]=100 [name]="Tom") # 初始化

⚙️ ​​2. 数组操作​

​访问元素​

  • 索引数组:${array[0]}
  • 关联数组:${assoc_arr["name"]}
  • 获取所有元素:${array[@]}${array[*]}@推荐避免空格问题)。

​获取长度​

echo ${#array[@]}    # 输出元素个数
echo ${#array[0]}    # 输出第一个元素的字符长度

​遍历数组​

  • ​索引数组​​: for i in "${array[@]}"; do echo "$i"; done # 遍历值 for i in "${!array[@]}"; do echo "$i: ${array[$i]}"; done # 遍历下标和值
  • ​关联数组​​: for key in "${!assoc_arr[@]}"; do echo "$key: ${assoc_arr[$key]}"; done

​增删改查​

  • ​增加元素​​: array+=("orange") # 尾部追加 assoc_arr["age"]=25 # 关联数组新增键
  • ​删除元素​​: unset array[1] # 删除索引数组第二个元素 unset assoc_arr["name"] # 删除关联数组键 unset array # 删除整个数组
  • ​修改元素​​: array[0]="grape" # 索引数组修改 assoc_arr["id"]=200 # 关联数组修改

​切片与替换​

  • ​切片​​:${array[@]:1:2} # 从下标1开始截取2个元素
  • ​临时替换​​:${array[@]/apple/pear} # 替换所有匹配值(不修改原数组)
  • ​永久替换​​:array=(${array[@]/apple/pear})

🔑 ​​3. 关联数组特有操作​

  • 声明必须使用 declare -A
  • 键可以是任意字符串,如: declare -A colors colors["red"]="#FF0000"

💡 ​​4. 实用技巧​

  • ​数组转函数参数​​: func() { local arr=("$@"); echo "${arr[@]}"; } func "${array[@]}" # 传递数组
  • ​命令结果转数组​​: files=($(ls)) # 将ls输出存入数组
  • ​判断下标是否存在​​: if [[ -v array[3] ]]; then echo "下标3存在"; fi

💎 ​​总结​

​操作​​索引数组​​关联数组​
​声明​直接定义declare -A 必需
​访问元素​${array[0]}${assoc_arr["key"]}
​遍历​for i in "${array[@]}"for key in "${!assoc_arr[@]}"
​删除元素​unset array[1]unset assoc_arr["key"]

关联数组需Bash 4.0+(查看版本:bash --version)。若需复杂数据处理,可结合循环和条件判断实现排序、过滤等。

通过灵活运用数组,可高效管理批量数据(如日志分析、配置项存储)。建议实操练习以巩固语法细节。

此条目发表在未分类分类目录。将固定链接加入收藏夹。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注