如何编写Bash脚本从variables.tf提取内容生成指定格式terraform.tfvars
问题解决方法
你出现顺序颠倒的核心原因是:variables.tf 中每个变量块的结构是先声明变量名,再定义description属性,而你当前的脚本是逐行匹配到内容就直接写入文件,自然会先输出变量赋值行,再输出注释行。
修改思路也很简单:新增一个临时变量暂存每次读到的变量名,等匹配到对应description的时候,再按「先输出注释、后输出变量赋值」的顺序写入文件即可。
修改后的完整脚本如下:
#!/bin/bash # 先清空目标文件避免内容残留 > terraform.tfvars # 定义临时变量存储读取到的变量名 CURRENT_VAR="" grep 'description\|variable' variables.tf | while read line; do OUTPUT=$(echo "$line" | sed 's/ =//g; s/ {//g' ) case "$OUTPUT" in *variable*) # 读到变量名先暂存,不直接输出 CURRENT_VAR=$(echo "$OUTPUT" | awk -F "\"" '{print $2}') ;; *description*) DESCRIPTION=$(echo "$OUTPUT" | awk -F "\"" '{print $2}') # 按要求顺序先输出注释,再输出变量赋值 echo "#$DESCRIPTION" >> terraform.tfvars echo "$CURRENT_VAR = \"\"" >> terraform.tfvars # 每组配置之间加空行,和示例格式对齐,不需要可以删掉这行 echo "" >> terraform.tfvars ;; esac done
内容的提问来源于stack exchange,提问作者mocart
相关产品推荐
相关产品推荐

