如何通过 Node.js -e "evaluate script" 命令行开关使用 Unicode 文字

How to use Unicode literals with the Node.js -e "evaluate script" commandline switch

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 下可以正常工作。)

尝试

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

双引号确保 console.log('hello \u00A9')node.

解释为 单个 参数

在您最初的尝试中,node 看到 2 个参数跟在 -e 之后(被 'hello \u00A9' 中的 space 分割) : console.log('hello\u00A9'),并且由于 -e 之后的第一个参数本身不是语法上有效的表达式,因此出现语法错误。


背景:

包含要执行的 JavaScript 代码片段的 script 参数(-e 的选项参数)必须是 distinct命令行上的参数,以便它可以与其他参数区分开来,例如传递给它的参数 ([arguments]).

使嵌入白色的字符串space 与参数不同的方法是将其作为一个整体引用

在 Windows 上,这通常使用 引号完成,但最终取决于调用的程序来解释参数(在 shell 可能有扩展标记,例如环境变量引用)。

由于单引号和双引号可以在 JavaScript 中互换使用,您 可能 甚至可以交换单引号和双引号:node -e 'console.log("hello \u00A9")'

(这在 Unix 上绝对有效,其中 shell 本身 将单引号字符串识别为不同的参数,并且所有程序都被传递给一个已解析的数组参数而不是命令行来解释自己)。