使用带有 EOF 的变量来生成文件

Posted

技术标签:

【中文标题】使用带有 EOF 的变量来生成文件【英文标题】:Use variable with the EOF to generate a file 【发布时间】:2017-11-17 09:46:58 【问题描述】:

我正在尝试根据this SO 之后的shell 变量生成一个.js 文件。但是,脚本仍然使用APP_VERSION: $bumped_version创建文件

这是我的脚本:

version=9.9.9

cat > ./constant/app.js <<'msg'
export default Object.freeze(
  APP_VERSION: $bumped_version
)
msg

生成的 app.js:

export default Object.freeze(
  APP_VERSION: $bumped_version
)

感谢您的帮助!

【问题讨论】:

从 msg 中删除引号,其中明确表示,不要扩展任何变量或通配符。 @grail 啊...谢谢,刚才走错方向了。你能回答这个问题以便我标记它吗? 【参考方案1】:

Heredocs 有几种不同的使用方式:

    标准 - 这允许扩展参数,但必须使结束词硬靠左边缘:

cat <<EOF ... EOF

    缩进 - 在这里您可以使用制表符来缩进文本和结束词

cat <<-EOF [tab][tab]... [tab]EOF

    引用 - 此版本防止进行任何扩展,如果您使用它来创建另一个带有变量的脚本,这将很有用。 如果输出到文件,每行开头的所有选项卡都将被删除

cat <<'EOF' ... EOF

您也可以将 2 和 3 结合起来。

【讨论】:

以上是关于使用带有 EOF 的变量来生成文件的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之Prototype模式

如何创建 Visual Studio 加载项来生成文件?

使用cat和EOF生成 shell 脚本时会自动解析变量的解决办法

Jmeter参数化

带有 Mappedbus 的 Java IPC - 在 EOF 上重置文件

当对象只有最终字段时,如何编写递归方法来生成算术序列?