数组参考

索引数组

# 声明和初始化 fruits=("apple" "banana" "cherry") declare -a servers=("web1" "web2" "db1") # 访问元素 echo "${fruits[0]}" # apple echo "${fruits[-1]}" # cherry(最后一个) echo "${fruits[@]}" # 所有元素 echo "${#fruits[@]}" # 元素个数:3 echo "${!fruits[@]}" # 所有索引:0 1 2 # 追加元素 fruits+=("date") # 切片:${array[@]:start:length} echo "${fruits[@]:1:2}" # 从索引 1 开始取 2 个 # 合并数组 all=("${fruits[@]}" "${servers[@]}")

关联数组(字典)

# 声明关联数组(bash 4+) declare -A config=( ["host"]="db.example.com" ["port"]="5432" ) # 访问值 echo "${config["host"]}" # 获取所有键和值 echo "${!config[@]}" # 键 echo "${config[@]}" # 值 # 检查键是否存在 [[ -v config["host"] ]] && echo "host 已设置" # 遍历 for key in "${!config[@]}"; do echo "$key = ${config[$key]}" done

数组遍历模式

# 基本遍历 for server in "${servers[@]}"; do echo "检查 $server" done # 带索引遍历 for i in "${!servers[@]}"; do echo "[$i] ${servers[$i]}" done # 从文件读取数组(bash 4+) mapfile -t lines < /etc/hosts # 从命令输出读取数组 mapfile -t processes < <(ps aux | awk '{print $1}')

Map 与 Filter 模式

# Map:对每个元素变换 numbers=(1 2 3 4 5) doubled=() for n in "${numbers[@]}"; do doubled+=("$((n * 2))") done echo "${doubled[@]}" # 2 4 6 8 10 # Filter:保留满足条件的元素 evens=() for n in "${numbers[@]}"; do (( n % 2 == 0 )) && evens+=("$n") done echo "${evens[@]}" # 2 4