Conforme a documentação , eu esperava que o heredoc e o heredoc recuado lidassem com recuo de forma diferente. Mas eles parecem estar fazendo a mesma coisa. O que é surpreendente é que o heredoc recuado não corta os espaços em branco iniciais com base no nível de recuo da primeira linha do texto no corpo do heredoc.
Aqui está meu código:
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
}
E aqui está o resultado:
+ here = <<-EOT
One
two
three
four
EOT
+ here_indented = <<-EOT
One
two
three
four
EOT
O que eu esperava:
- O heredoc normal deveria ter gerado um erro porque a palavra delimitadora "EOT" estava recuada
- O heredoc recuado deveria ter cortado os espaços iniciais nas linhas 2 a 4 com base no fato de que a primeira linha não estava recuada
Tentei imprimir a saída como uma string interpolada "${heredoc_indented}"
, mas o resultado é o mesmo.
O que estou entendendo errado aqui?
O tratamento adicional especial para um "heredoc recuado" é contar o número de caracteres de espaço no início de cada linha, encontrar a linha com o menor número de espaços e, então, remover esse número de espaços do prefixo de todas as outras linhas.
Por exemplo, com a seguinte entrada:
A linha "hello" começa com quatro espaços, e a linha "world" começa com seis espaços. Portanto, o menor número de espaços é quatro, e assim o Terraform remove quatro espaços do início de cada linha.
No resultado, então, a linha "hello" começa com 4-4=0 espaços, enquanto a linha "world" começa com 6-4=2 espaços.
Agora vamos considerar o exemplo da sua pergunta:
Neste caso, a linha "One" começa com zero espaços, e então esse é o menor número de espaços. Portanto, o Terraform remove zero espaços do início de cada linha, fazendo com que este caso em particular se comporte essencialmente da mesma forma que o heredoc não recuado.