【问题标题】:How do I use new line characters (\n) with command line arguments in node?如何在节点中将换行符 (\n) 与命令行参数一起使用?
【发布时间】:2022-01-21 16:01:02
【问题描述】:

我想制作一个脚本,在将\n 字符作为命令行参数给出时将其视为文字换行符。例如,如果我的脚本是test.js,我想使用node test.js 'Line 1\nLine 2' 并得到输出:

Line 1
Line 2

我用来测试是否可行的脚本是:

console.log(process.argv[2]);

但是当我像node test.js 'Line 1\nLine2' 一样使用它时,它给我的输出是:

Line 1\nLine2

我如何做到这一点?

【问题讨论】:

  • 我不明白是什么阻止了你? console.log('line 1\nline 2'); 打印出您想要的内容。
  • 当您直接使用它时会这样做,但是当您将字符串作为命令行参数提供时,它会被解释为只是一个字符。
  • 其中一些可能取决于您使用的 shell 或命令提示符,以及在将参数传递给程序之前它如何解释参数。
  • 我使用的是 Linux,我尝试过 bash、sh 甚至 zsh。都给出相同的输出。

标签: node.js newline


【解决方案1】:

要解释发生了什么,请查看以下内容:

const str1 = process.argv[2];
const str2 = '\n';

console.log(Buffer.from(str1)) // prints <Buffer 5c 6e> if '\n' is passed as an argument to the script
console.log(Buffer.from(str2)) // prints <Buffer 0a>

在 ASCII 表中查找缓冲区值,您会发现:

10  0a  00001010    &#10;   LF  Line Feed
92  5c  01011100    &#92;   \   backslash
110 6e  01101110    &#110;  n

如您所见,'\n' 参数没有被解释为换行符,而是被解释为\n

要解决此问题,您可以使用 bash 将参数通过 $'&lt;...&gt;' expansion 强制解释转义序列:

node test.js $'Line1\nLine2'

这将打印出来

Line1
Line2

按预期发送到控制台。

【讨论】:

    猜你喜欢
    • 2017-05-09
    • 2017-05-07
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2021-08-26
    相关资源
    最近更新 更多