Terraform for loop未使用变量名

Terraform for loop未使用变量名,terraform,Terraform,我在terraform控制台中有这样一个表达式: jsonencode([for x in ["a", "b"] : { x = "hello" }]) 它给出以下输出: [{"x":"hello"},{"x":"hello"}] 为什么它从字面上解释“x”,而不是作为一个变量?这是我想要的输出: [{"a":"hello&

我在terraform控制台中有这样一个表达式:

jsonencode([for x in ["a", "b"] : { x = "hello" }])
它给出以下输出:

[{"x":"hello"},{"x":"hello"}]
为什么它从字面上解释“x”,而不是作为一个变量?这是我想要的输出:

[{"a":"hello"},{"b":"hello"}]

发生这种情况的原因是,此上下文中的无引号字符串被视为:

地图中的键必须是字符串;如果它们是有效标识符,则可以将其保留为不带引号的,否则必须将其引为引号

如果要将
x
视为变量,可以在引号中使用它括号中使用它

jsonencode([for x in ["a", "b"] : { (x) = "hello" }])


发生这种情况的原因是,此上下文中的无引号字符串被视为:

地图中的键必须是字符串;如果它们是有效标识符,则可以将其保留为不带引号的,否则必须将其引为引号

如果要将
x
视为变量,可以在引号中使用它括号中使用它

jsonencode([for x in ["a", "b"] : { (x) = "hello" }])


哪个版本的Terraform?哪个版本的Terraform?我验证了这两种方法都适用于0.14.2。但是,第二种方法生成了一个警告(我不同意)
警告:仅插值表达式已被弃用
@JohnHanley,谢谢。不确定,您不同意警告或方法本身?警告。在这种情况下,必须用引号括起来。我希望Terraform的一位开发人员在他们迁移到1.0时注意到。事实上,第二个示例使用了一个不推荐的功能,恰好获得了所需的行为,但第一个示例(使用括号)是。我验证了这两种方法都适用于0.14.2。但是,第二种方法生成了一个警告(我不同意)
警告:仅插值表达式已被弃用
@JohnHanley,谢谢。不确定,您不同意警告或方法本身?警告。在这种情况下,必须用引号括起来。我希望Terraform的一位开发人员在迁移到1.0时能注意到。事实上,第二个示例使用了一个不推荐使用的功能,恰好获得了所需的行为,但第一个示例(使用括号)是。