Shell中如何将HCL格式的tags变量转换为tfh命令所需参数格式
解决方案
调整后可用的完整脚本
#!/bin/bash [[ -z "$1" ]] && echo "==> Usage: ./transform_tfe_vars.sh <INPUT_FILE>" && exit 1; vars_file=${1} tmp_file=".todelete.tmp" # 预处理:过滤注释、空行,提取所有键值对行并清理格式 grep -v '^#' "$vars_file" | awk '!/^$/' | grep -E '=' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//;s/,$//' > "$tmp_file" # 拼接所有键值对为单个符合要求的字符串 kv_pairs="" while read -r p; do # 按等号分割提取键和值,自动忽略等号前后的空格 a=$(echo "$p" | awk -F'[[:space:]]*=[[:space:]]*' '{print $1}') b=$(echo "$p" | awk -F'[[:space:]]*=[[:space:]]*' '{print $2}' | sed 's/"//g') # 拼接键值对,添加转义双引号 if [ -z "$kv_pairs" ]; then kv_pairs="${a}=\\\"${b}\\\"" else kv_pairs="${kv_pairs}, ${a}=\\\"${b}\\\"" fi done < "$tmp_file" # 输出最终符合要求的命令 echo "tfh pushvars -overwrite-all -dry-run false -hcl-var \"tags={${kv_pairs}}\"" # 清理临时文件 rm -f "$tmp_file"
核心修改点说明
- 修正了原脚本的参数拼写错误:将错误的
shcl-var替换为正确的hcl-var - 调整了处理逻辑:不再逐行生成命令,而是把所有键值对拼接为单个字符串后,统一放到
tags={}结构内部 - 优化了键值提取规则:使用等号作为分隔符,自动忽略等号前后的空格,同时删除值两端原有的双引号后,统一添加转义格式的双引号
- 预处理阶段自动清理键值对行尾的逗号和多余空格,避免拼接后出现格式错误
你直接将存储tags定义的文件作为参数传入脚本执行,即可得到目标格式的命令。
内容的提问来源于stack exchange,提问作者Andrew Ramnikov
相关产品推荐
相关产品推荐

