Linux终端导出Terraform list(strings)类型变量报错解决
Terraform通过环境变量传入list(string)类型变量的正确方案
报错根因
你之前的写法存在三个核心问题:
- 环境变量值不符合HCL语法要求:list类型属于复杂类型,通过环境变量传值时内容必须是完整合法的HCL列表表达式,必须在外层包裹
[]标识列表结构。你两次传入的值都只有逗号分隔的字符串元素,没有外层方括号,Terraform解析完第一个字符串后会把后面的逗号、其余元素判定为表达式外的多余字符,触发Extra characters after expression报错。 - 首次命令存在shell语法错误:在bash等shell中,双引号内部直接书写未转义的双引号会被识别为字符串截断,实际导出的变量值是断裂的,才会触发
Invalid number literal的解析错误。 - 环境变量命名不符合Terraform默认规则:如果是依赖Terraform自动读取环境变量赋值,变量名必须以
TF_VAR_为前缀,对应你名为example的变量,正确的环境变量名应为TF_VAR_example,你使用的VAR_example不会被Terraform自动识别为变量输入。如果你是通过自定义脚本读取该变量再传给Terraform的-var参数,可保留原有变量名。
可行的导出命令
优先使用单引号包裹整个HCL表达式,不需要额外转义内部双引号,写法最简单:
# 若使用Terraform自动读取环境变量的规则 export TF_VAR_example='["xyz", "abc", "123"]' # 若你需要保留自定义的VAR_example变量名 export VAR_example='["xyz", "abc", "123"]'
如果你的字符串元素中本身包含单引号,可换用双引号包裹、内部双引号加反斜杠转义的写法,效果完全一致:
export TF_VAR_example="[\"xyz\", \"abc\", \"123\"]"
验证方法
导出后先执行echo $TF_VAR_example(替换为你实际使用的变量名),确认输出内容为完整的["xyz", "abc", "123"],再执行terraform plan即可正常解析变量,不会再触发之前的语法报错。
内容的提问来源于stack exchange,提问作者devgirl
相关产品推荐
相关产品推荐

