使用命令扩展运行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
提出问题。