使用命令扩展运行NPM脚本在返回之前分析结果 – 与bash不同

如果我在shell中运行echo "$(echo 'A\nB')" ,我得到的输出是:

 A\nB 

但是,如果我在NPM脚本中放置相同的代码:

 "scripts": { "example": "echo \"$(echo 'A\nB')\"" } 

然后运行该脚本: npm run -s example

我得到一个输出与\n换成一个实际的新行:

 A B 

我怎样才能禁用这个string的解释? 为什么NPM将命令扩展与shell不同?

这只发生在命令扩展: $(some command here)

其中一部分是npm的行为,其中的一部分是因为你正在将脚本写入JSON文件。

\n是换行符的JSON转义序列。

"echo \"$(echo 'A\nB')\""会被传递给npm

 echo "$(echo 'A B')" 

但是, npm处理换行肯定存在一些问题(可能与\n也是一个JS转义序列有关)。

通过试验和错误,我发现这是有效的:

 "scripts": { "example": "echo \"$(echo 'A\\\\\\\\nB')\"" } 

没有JSON转义,这将是echo "$(echo 'A\\\\nB')"

这太奇怪了。 也许你应该用npm提出问题。

https://github.com/npm/npm/issues