You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何npm start会忽略参数中转义后的反引号?

为什么npm start传递转义反引号时会被忽略?

这核心是命令解析的双重层级导致的,咱们一步步拆解:

1. 直接执行node时的解析流程

当你在终端敲node index.js test\`backticks`:

  • 第一步是你的终端shell(比如bash/zsh)先处理转义:\``会被解析成普通的反引号,所以最终传递给node的参数是test``backticks。
  • node直接接收这个参数,不会再做shell语法解析,所以能原样输出test``backticks,符合你的预期。

2. npm start时的解析流程

但用npm start -- test\`backticks`时,流程多了一层npm的shell调用:

  • 第一步还是你的终端shell先处理转义,把test\`backticks变成test``backticks`,传递给npm。
  • npm在执行start脚本时,会把你传递的参数附加到脚本命令后面,拼成node ./index.js test``backticks,然后交给系统默认shell(比如sh)再次执行这个完整命令。
  • 这时候,这个shell会解析命令里的反引号:``是shell的命令替换语法,因为反引号里没有内容,执行后返回空字符串。所以最终传递给node的参数就变成了test + 空 + backticks → testbackticks,反引号就被“吃掉”了。

解决办法

想要让npm正确传递带反引号的参数,你需要绕过第二次shell的解析:

  • 方法一:双重转义
    给反引号做两次转义,让终端shell处理后,传递给npm的参数还保留一层转义:

    npm start -- test\\\`\\\`backticks
    

    终端shell解析后,传递给npm的是test\`backticks,npm交给shell执行时,shell会把`解析成,最终node收到test``backticks。

  • 方法二:用单引号包裹参数
    单引号里的内容不会被终端shell解析,直接原样传递给npm:

    npm start -- 'test``backticks'
    

    npm把参数传递给shell时,单引号会被移除,最终node收到的就是test``backticks。

内容的提问来源于stack exchange,提问作者Evya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:52:33