5月30日 00:10

Shell 脚本中如何定义和使用数组?

Shell 数组主要分两类:普通数组和关联数组。普通数组用数字下标,适合保存文件名、参数列表;关联数组用字符串 key,适合保存配置。写脚本时最重要的一点是:访问数组尽量用双引号包住 "${arr[@]}",否则遇到空格文件名会翻车。

追问

普通数组怎么定义和读取?

普通数组用空格分隔定义,索引从 0 开始。${arr[0]} 取第一个元素,${arr[@]} 取全部元素,${#arr[@]} 取长度。

${arr[@]}${arr[*]} 有什么区别?

加双引号时区别最大:"${arr[@]}" 会保留每个元素的边界,"${arr[*]}" 会把所有元素拼成一个字符串。遍历数组时优先用 "${arr[@]}"

关联数组怎么用?

Bash 4+ 支持关联数组,必须先 declare -A map。例如 map[host]=localhost,读取用 ${map[host]},遍历 key 用 ${!map[@]}

删除数组元素会重新编号吗?

不会。unset arr[1] 只删除该位置,其他索引不变,所以遍历稀疏数组时用 ${!arr[@]} 更稳。

写段代码

bash
arr=("a.txt" "b file.txt") arr+=("c.txt") for i in "${!arr[@]}"; do echo "$i => ${arr[$i]}" done declare -A conf=([host]="127.0.0.1" [port]="3306") echo "${conf[host]}:${conf[port]}"
标签:Shell