定界符与缩进定界符

问题描述 投票:0回答:1

根据文档,我期望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

我的期望:

  1. 正常的heredoc应该会抛出错误,因为分隔符“EOT”被缩进了
  2. 缩进的heredoc应该根据第一行未缩进的事实修剪掉第2行到第4行的前导空格

我尝试将输出打印为插值字符串

"${heredoc_indented}"
,但结果是相同的。

我在这里做错了什么?

terraform
1个回答
0
投票

“缩进定界符”的特殊附加处理是计算每行开头的空格字符数,找到空格数最少的行,然后从所有行的前缀中删除该空格数。其他线路。

例如,使用以下输入:

  foo = <<-EOT
    hello
      world
  EOT

“hello”行以四个空格开头,“world”行以六个空格开头。因此,最小空格数为 4,因此 Terraform 从每行开头删除了 4 个空格。

在结果中,“hello”行以 4-4=0 个空格开头,而“world”行以 6-4=2 个空格开头。

现在让我们考虑一下您问题中的示例:

locals {
    here_indented = <<-EOF
One
    two
    three
    four
    EOF
}

在这种情况下,“一”行以 zero 空格开头,因此这是最少的空格数。因此,Terraform 从每行的开头删除了 zero 空格,使得这种特殊情况的行为本质上与非缩进的定界文档相同。

© www.soinside.com 2019 - 2024. All rights reserved.