首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash EOF块在EOF块中可能吗?

Bash EOF块在EOF块中可能吗?
EN

Stack Overflow用户
提问于 2020-08-26 17:34:18
回答 1查看 190关注 0票数 1

我正尝试在一个文件中写入一个包含它自己的EOF块的块。这在bash中是可行的吗?

代码语言:javascript
复制
cat > terragrunt.hcl <<'EOF' 
# Automatically generated from script $(basename $0)

# Generate the AWS provider block
generate "provider" {
  path      = "provider.tf"
  if_exists = "overwrite_terragrunt"
  contents  = <<EOF
# Terragrunt root config
provider "aws" {
  # Only these AWS Account IDs may be operated on by this template
  allowed_account_ids = ["${local.account_id}"]
  region = "${local.infra_region}"
  version = "${local.customer_vars.locals.aws_provider_version}"
}
EOF
}

# Automatically generated from script $(basename $0)
EOF

正如预期的那样,它失败了:

代码语言:javascript
复制
❯ ./example.sh 
./example.sh: line 17: syntax error near unexpected token `}'
./example.sh: line 17: `}'

处理它的最佳解决方案是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-26 17:40:11

您所称的"EOF块“实际上被称为"Here Document" (通常缩写为"heredoc"),而字符串"EOF”实际上可以是您喜欢的任何“单词”。

heredoc包含所有内容,直到它匹配的分隔符为止,所以嵌套两个heredocs只需要选择两个不同的分隔符:

代码语言:javascript
复制
cat > terragrunt.hcl <<'ENDTERRAGRUNT' 
# Automatically generated from script $(basename $0)

# Generate the AWS provider block
generate "provider" {
  path      = "provider.tf"
  if_exists = "overwrite_terragrunt"
  contents  = <<ENDROOTCONFIG
# Terragrunt root config
provider "aws" {
  # Only these AWS Account IDs may be operated on by this template
  allowed_account_ids = ["${local.account_id}"]
  region = "${local.infra_region}"
  version = "${local.customer_vars.locals.aws_provider_version}"
}
ENDROOTCONFIG
}

# Automatically generated from script $(basename $0)
ENDTERRAGRUNT
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63594719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档