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[@]} 更稳。
写段代码
basharr=("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]}"