根据文档,我期望 heredoc 和缩进的 heredoc 以不同的方式处理缩进。但它们似乎在做同样的事情。令人惊讶的是,缩进的 heredoc 不会根据 heredoc 正文中第一行文本的缩进级别修剪前导空格。
这是我的代码:
locals {
here = <<EOF
One
two
three
four
EOF
}
locals {
here_indented = <<-EOF
One
two
three
four
EOF
}
output "here" {
value = local.here
}
output "here_indented" {
value = local.here_indented
}
输出如下:
+ here = <<-EOT
One
two
three
four
EOT
+ here_indented = <<-EOT
One
two
three
four
EOT
我的预期是:
- 正常的 heredoc 应该会抛出一个错误,因为分隔符单词“EOT”被缩进
- 由于第一行没有缩进,因此缩进的 heredoc 应该修剪第 2 行至第 4 行的前导空格
我尝试将输出打印为插值字符串"${heredoc_indented}"
,但结果是一样的。
我这里犯了什么错误?
对于“缩进的 heredoc”的特殊附加处理是计算每行开头的空格字符数,找到空格数最少的行,然后从所有其他行的前缀中删除该数量的空格。
例如,输入如下内容:
“hello”行以四个空格开头,“world”行以六个空格开头。因此,空格数最少为四个,因此 Terraform 会从每行开头删除四个空格。
结果中,“hello”行以 4-4=0 个空格开头,而“world”行以 6-4=2 个空格开头。
现在让我们考虑一下你的问题中的例子:
在这种情况下,“One”行以零个空格开头,因此这是最小的空格数。因此,Terraform 从每行的开头删除零个空格,使这种特殊情况的行为与非缩进的 heredoc 基本相同。