在 vim 中的 `grepprg` 的默认设置中,`$*`(一个美元符号后跟一个星号)是什么意思?

What does `$*`(a dollar sign followed by a star) mean in the default setting of `grepprg` in vim?

在 Mac 上的原版 vim 中,当我键入 :set grepprg? 时,它 returns 如下:

grepprg=grep -n $* /dev/null.

我明白 -n/dev/null 的意思, 感谢一个老问题 。 我也明白 $* 分别意味着什么。 但是,我不确定 $* 是什么意思。 我试图在 vim 文档中查找它, 但我能找到的只有

The placeholder "$*" is allowed to specify where the arguments will be included.

我觉得我在这里遗漏了一些重要的联系。 如果有人能向我解释,我将不胜感激 $* 如何作为占位符工作。

更新: 感谢@romainl 的详细解释, 我意识到我将 $* 误解为正则表达式, 而它们是 shell 脚本中约定的一部分。 事实上,已经存在 old post 关于这个特定的约定。 傻我!

我不确定除了你已经引用的内容之外还需要什么样的解释:

The placeholder "$*" is allowed to specify where the arguments will be included.

$* 只是一个占位符,它的工作原理与所有占位符一样:在实际发送到 shell 之前,该命令由 &grepprg$* 构建而成,如果存在,将替换为用户提供的任何模式、文件名、标志等。

假设您要在当前目录下的所有 JavaScript 个文件中搜索 foo\ bar。命令将是:

:grep 'foo\ bar' *.js

在您按下 <CR> 后,Vim 获取您提供给 :grep 的任何参数,在本例中:

'foo\ bar' *.js

然后,如果 &grepprg 中有一个 $*,它被替换为给定的参数:

grep -n 'foo\ bar' *.js /dev/null

或者,如果 &grepprg 中没有 $*,则将给定的参数附加到它,然后才将整个命令发送到 shell.

$* 表示“在这个命令中,我特别希望用户提供的参数出现在这里”。

至于$*的含义……$*没有内在含义,$*可能是$$$PLACEHOLDER$$$或任何东西。 $* 可能已被选中,因为它在 shell 脚本中用于表示提供给函数或脚本的所有参数,这与 &grepprg 中发生的事情的含义有些接近 $*.