如何将Shell读取的域名数组打印为同一行的大括号包裹格式
解决方法
核心原因
通配符*异常是Shell默认的路径名展开机制导致的,操作数组时全程用双引号包裹变量即可避免通配符被解析为文件匹配规则。
步骤1:修正数组读取逻辑
你原有的读取命令写法有误,推荐用更简洁的mapfile按行读取文件到数组,自动规避空行和展开问题:
mapfile -t domain_arr < ./FILENAME
如果你的环境不支持mapfile,改用read的正确写法:
IFS=$'\n' read -d '' -r -a domain_arr < ./FILENAME
步骤2:拼接生成目标格式字符串
利用IFS临时修改为逗号拼接数组元素,全程用双引号包裹变量保证*原样保留:
# 一行生成目标格式 result="'{$(IFS=,; echo "${domain_arr[*]}")}'"
验证结果
执行echo "$result"即可得到你需要的输出:
'{*.one.dev.arr.name.com,*.one.dev.brr.name.com,*.one.dev.sic.name.com,*.one.dev.sid.name.com,*.one.dev.xyz.name.com,*.one.dev.yza.name.com}'
内容的提问来源于stack exchange,提问作者mac
相关产品推荐
相关产品推荐

