如何在Bash中以逗号分隔的格式输出数组内容?
问题解决:Bash数组实现逗号分隔格式输出
首先要修正你脚本里数组元素的添加逻辑:原代码中nameserver+=$dns是把字符串直接拼接到数组的第一个元素中,而非新增数组元素。正确的数组追加写法应该是nameserver+=("$dns"),这样才能真正将每个输入的DNS地址作为独立元素存入数组。
以下是几种实现逗号分隔输出的可行方案:
方案1:使用printf拼接(推荐,兼容特殊字符)
这是最可靠的方式,能处理元素中包含空格等特殊字符的场景:
# 先判断数组非空,避免空输出 if [ ${#nameserver[@]} -gt 0 ]; then printf '%s' "${nameserver[0]}" # 遍历除第一个元素外的所有元素,前面加逗号空格 for item in "${nameserver[@]:1}"; do printf ', %s' "$item" done echo # 最后换行 fi
方案2:利用IFS参数展开(Bash 4.0+适用)
通过修改内部字段分隔符实现快速拼接:
if [ ${#nameserver[@]} -gt 0 ]; then local IFS=', ' echo "${nameserver[*]}" fi
解释:IFS=', '设置数组元素的连接符,${nameserver[*]}会用该分隔符拼接所有数组元素。
修正后的完整脚本
declare -a nameserver=() for ((n=1; n<=5; n++)) do read -p "Enter DNS$n ? : " dns if [ ! -z "$dns" ] then nameserver+=("$dns") # 修正数组追加逻辑 else break fi done # 采用方案1输出 if [ ${#nameserver[@]} -gt 0 ]; then printf '%s' "${nameserver[0]}" for item in "${nameserver[@]:1}"; do printf ', %s' "$item" done echo fi
内容的提问来源于stack exchange,提问作者dilbar
相关产品推荐
相关产品推荐

