Node.js有一个-e
命令行开关,用于评估命令行上提供的代码,而不是单独的脚本文件。
奇怪的是,我无法在线找到它的官方文档,但是如果你运行node --help
,节点可执行文件会自行记录它:
>node --help
Usage: node [options] [ -e script | script.js ] [arguments]
node debug script.js [arguments]
Options:
-v, --version print Node.js version
-e, --eval script evaluate script
-p, --print evaluate script and print result
现在有几种方法可以在JavaScript中使用Unicode文字,所有这些方法似乎都以\u
开头。
但无论我如何尝试使用Unicode文字引用或转义字符串,代码总是无法执行。在官方Node.js和JXcore下都有。
节点
>node -e console.log('hello \u00A9')
[eval]:1
console.log('hello
^^^^^^
SyntaxError: Unexpected token ILLEGAL
at Object.exports.runInThisContext (vm.js:53:16)
at Object.<anonymous> ([eval]-wrapper:6:22)
at Module._compile (module.js:435:26)
at node.js:578:27
at doNTCallback0 (node.js:419:9)
at process._tickCallback (node.js:348:13)
JXcore
>jx -e console.log('hello \u{00A9}')
SyntaxError: unterminated string literal ([eval] 1:12)
at ([eval]-wrapper:6:8)
at Module.prototype._compile (module.js:621:10)
at evalScript (node.js:1054:18)
at startup (node.js:419:7)
at node.js:1604:3
我尝试过双\\
和四倍\\\\
。我尝试过单引号和双引号来分隔字符串。
(我只是在Windows下尝试这个,以防万一在* nix下可以正常工作。)
答案 0 :(得分:2)
尝试
node -e "console.log('hello \u00A9')"
双引号可确保console.log('hello \u00A9')
将node
解释为单个参数。
在您的原始尝试中,node
在-e
后面看到了 2 个参数(由'hello \u00A9'
内的空格分隔):console.log('hello
和{{ 1}},因为\u00A9')
之后的第一个参数本身并不是语法上有效的表达式,所以语法错误。
<强>背景强>
包含要执行的JavaScript代码片段的-e
参数(script
&#39;选项参数)必须是命令行上的 distinct 参数,以便可以将其与其他参数区分开来,例如传递给它的参数(-e
)。
使用嵌入式空格作为参数的字符串的方法是引用它作为一个整体。
在Windows上,这通常使用 double 引号来完成,但最终由调用的程序来解释参数(在shell可能扩展了标记之后,例如环境变量引用)
由于单引号和双引号可以在JavaScript中互换使用,因此可能甚至可以使用单引号和双引号进行交换:[arguments]
(这肯定适用于Unix,其中 shell本身将单引号字符串识别为一个独特的参数,并且所有程序都传递一个解析参数数组而不是命令行来解释自己)。