You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Node.js使用-e参数执行含转义字符代码的问题

解决Node.js -e 参数的转义问题

这个问题的核心在于shell的转义规则和JavaScript的转义规则是两层独立的处理逻辑,你之前的尝试因为没处理好这两层转义的叠加,才出现了多余的斜杠。下面给你两种靠谱的解决方法:

方法1:用单引号包裹 -e 的代码内容(最推荐)

在bash、zsh这类主流shell里,单引号内部的字符不会被shell解析转义,这样你可以直接把原本的JavaScript代码放进去,不需要额外调整转义符:

node -e 'console.log("hello \"\"world")'

运行这个命令后,shell会原封不动地把console.log("hello \"\"world")传给Node.js,Node解析JS转义后,就会输出hello ""world,和你直接运行文件的效果完全一致。

方法2:用双引号包裹时做双重转义

如果你一定要用双引号包裹-e的内容,就得对JavaScript里的转义符做双重转义
因为shell会先解析一层转义,所以JS里用来表示双引号的\",在shell里需要写成\\\"——shell会把\\解析成\,把\"解析成",最终传给Node的就是我们需要的\"

正确的命令应该是:

node -e "console.log(\"hello \\\\\\\"\\\\\\\"world\")"

不过这个写法太繁琐,更简单的替代方式是在JS里用单引号包裹字符串,这样双引号就不需要转义了:

node -e "console.log('hello ""world')"

shell解析双引号后,传给Node的是console.log('hello ""world'),运行后直接输出hello ""world

为什么你之前的尝试会出错?

你之前的命令node -e "console.log(\"hello \\\"\\\"world\")",shell解析后传给Node的其实是console.log("hello \"world")——因为\\\"\\\"被shell解析成了单个\"(而非\"\"),所以Node运行时,\"被解析成",剩下的一个\就被保留了,导致输出hello \world

内容的提问来源于stack exchange,提问作者ThomasReggi

火山引擎 最新活动