我正在尝试使用 zsh 终端运行简单的 npm 安装。
npm install --save-dev @typescript-eslint/eslint-plugin@^4.0.0
zsh: no matches found: @typescript-eslint/eslint-plugin@^4.0.0
似乎是因为节点模块名称中的@。我找不到发生这种情况的答案,我尝试将 ~/.zshrc 中的路径更改为不同的值,但无济于事。
如果名称中没有@,我可以毫无问题地保存任何其他节点模块。
有关其他信息,它似乎正在安装节点模块的特定版本而不是名称。运行npm install --save-dev @typescript-eslint/eslint-plugin
可以,但是添加会@^4.0.0
导致错误zsh: no matches found
。
答案1
“未找到匹配项”意味着 zsh 认为该单词是通配符模式。要告诉 zsh 您想要按字面意思使用该单词而不是将其解释为通配符模式,请使用引号:
npm install --save-dev '@typescript-eslint/eslint-plugin@^4.0.0'
npm install --save-dev "@typescript-eslint/eslint-plugin@^4.0.0"
npm install --save-dev @typescript-eslint/eslint-plugin@\^4.0.0
此处可以使用单引号或双引号。两者之间的区别在于,一些字符在双引号 ( !"$\`
) 内保留其特殊含义,但只有'
其本身在 a 之后保留其特殊含义'
(以终止单引号文字字符串)。或者,在每个对 shell 有特殊含义的字符前放置一个反斜杠。
这里有问题的字符不是@
,而是^
。@
不需要保护:它可以是通配符构造的一部分@(…)
但仅当kshglob
启用该选项并且后跟一个左括号时,无论如何都需要引用该括号,这足以保护@
.^
默认情况下不是通配符,但它是一个 (^foo
意思是“所有不匹配的东西foo
”)当非常流行的选项extended_glob
已启用。也是(表示“除了匹配之外的所有匹配项”)~
下的通配符。也是一个extended_glob
foo~bar
foo
bar
^
历史扩展角色,但前提是一个单词以另一个单词开头^
并包含另一个单词^
。