2016-02-09 2 views
1

У Node.js есть переключатель командной строки -e для оценки кода, предоставленного в командной строке, а не в отдельном файле сценария.Как использовать литералы Unicode с помощью 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 

В настоящее время существует несколько способов использования литералов Unicode в JavaScript, все, казалось бы, начинаются с \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

Вы пытаетесь выполнить это из 'cmd.exe'? Или PowerShell? – mklement0

+1

Из 'cmd.exe'. Я никогда не учился нравиться PowerShell. – hippietrail

ответ

2

Попробуйте

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

двойной кавычки гарантирует, что console.log('hello \u00A9') интерпретируется как одной аргумент node.

В вашей первоначальной попытке, node увидел аргументов следующих -e (расщепляется пространством внутри 'hello \u00A9'): console.log('hello и \u00A9'), и так как первый аргумент следующего -e не был сам по себе синтаксический правильному выражению, вы получили синтаксис ошибка.


фон:

script аргумента (-e «s варианта аргументов), содержащий фрагмент кода JavaScript для выполнения должна быть отчетливым аргументом в командной строке, так что он может следует отличать от других аргументов, таких как аргументы, которые нужно передать ему ([arguments]).

Способ создания строки со встроенным пробелом, отличным от аргумента, является , в целом это.

В Windows это обычно делается с котировками, но в конечном итоге это зависит от программы, вызываемой для интерпретации аргументов (после того, как оболочка может иметь расширенные токены, такие как ссылки на переменные среды).

С одинарной и двойной кавычки могут быть использованы взаимозаменяемо в JavaScript, вы может даже уйти с поменяв одно- и двойные кавычки: node -e 'console.log("hello \u00A9")'

(Это, безусловно, работает на Unix, где сама оболочка распознает строку с одной кавычкой как отдельный аргумент, и всем программам передается массив анализируемых аргументов, а не командной строки для интерпретации).

+1

Вау я действительно был уверен, что я пробовал каждую комбинацию и перестановку цитат. Но получить детерминированный ответ с объяснением лучше, чем неопределенные попытки перестановки (-: Это действительно работает с Nodejs, JXcore и MS's ChakraCore port of Node тоже! – hippietrail

+1

Я рад, что это сработало. Я добавил дополнительную информацию о предыстории. – mklement0

+0

Это было очень полезно, спасибо! Я хотел, чтобы это было диагностикой для возможной ошибки в JXcore, где старый скрипт my выводит Unicode на консоли Windows под Nodejs, но mojibake под JXcore. Этот тест выводит то же самое для обоих, по крайней мере, теперь я знаю, что мне придется копать глубже, чтобы узнать, что не так для JXcore в моем сценарии. – hippietrail

 Смежные вопросы

  • Нет связанных вопросов^_^