【问题标题】:ES6 template literals bash continuationES6 模板文字 bash 延续
【发布时间】:2017-10-26 04:38:43
【问题描述】:

我刚刚发现在 ES6 模板文字中,这样做:

const template = `npm install \
&& npm start`;

将导致此npm install && npm start。这是因为行尾的\ 正在“转义”换行符。

我对此感到非常恼火。

在 bash 和其他内容中,您可以使用 \ 作为行继续符。所以你真的希望得到的字符串是:

npm install \
&& npm start

有没有办法解决这个问题?

【问题讨论】:

  • 这里的模板文字没什么特别的,这也适用于普通字符串。是的,您总是必须转义反斜杠。
  • 您可能想试试String.raw 标签。

标签: ecmascript-6


【解决方案1】:

\ 是字符串和模板文字中的转义字符。没有办法解决这个问题。

但是,您可以使用String.raw 标记模板。 String.raw 忽略转义序列并按字面意思返回。

const template = String.raw`npm install \
&& npm start`;
console.log(template);

但是,您仍然无法在不修改的情况下复制每个 bash 命令。 Bash 允许您通过${variable} 语法引用变量。 ${...} 在模板文字内部是特殊的,这就是执行替换的方式。所以这些必须被转义,但这仅适用于普通的模板文字或字符串。

【讨论】:

  • 这个 String.raw 函数很值得了解。就像你说的那样,它可以很容易地解决我的问题,我仍然可以在那里进行插值。最后,我认为我必须忍受对 bash 脚本等进行一些小的修改。
【解决方案2】:

这给了我想要的结果

const template = `npm install \\
&& npm start`;

我对此并不完全满意。我将使用 ES6 模板文字来生成文件,如 Dockerfile、package.json 等

我希望我可以直接将文件内容粘贴到文字中而无需修改保存插值位。

但我马上就遇到了这个案子!

【讨论】:

    猜你喜欢
    • 2014-05-01
    • 2013-12-12
    • 2017-03-02
    • 2016-09-19
    • 2015-02-18
    相关资源
    最近更新 更多