如何在Node.js -e“evaluate script”命令行开关中使用Unicode文字

时间:2016-02-09 12:52:02

标签: node.js windows unicode escaping unicode-literals

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

1 个答案:

答案 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本身将单引号字符串识别为一个独特的参数,并且所有程序都传递一个解析参数数组而不是命令行来解释自己)。