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

Shell vim中默认设置“grepprg”中的“$*”(一个美元符号后跟一个星)是什么意思?,shell,vim,grep,metacharacters,Shell,Vim,Grep,Metacharacters,在Mac上的vanilla vim中,当我键入:set grepprg?时,它返回以下内容: grepprg=grep-n$*/dev/null 我理解-n和/dev/null的含义, 多亏了一个老问题。 我也理解$和*各自的含义。 但是,我不知道如何理解$*。 我试着在vim文档中查找它, 但我能找到的只是 允许占位符“$*”指定将包含参数的位置 我感觉我错过了一些重要的联系。 如果有人能给我解释一下,我将不胜感激 $*作为占位符的工作方式 更新: 感谢@romainl的详细解释, 我意识到我

在Mac上的vanilla vim中,当我键入
:set grepprg?
时,它返回以下内容:

grepprg=grep-n$*/dev/null

我理解
-n
/dev/null
的含义, 多亏了一个老问题。 我也理解
$
*
各自的含义。 但是,我不知道如何理解
$*
。 我试着在vim文档中查找它, 但我能找到的只是

允许占位符“$*”指定将包含参数的位置

我感觉我错过了一些重要的联系。 如果有人能给我解释一下,我将不胜感激
$*
作为占位符的工作方式

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

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

允许占位符“$*”指定将包含参数的位置

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

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

:grep 'foo\ bar' *.js
按下
后,Vim将获取您提供给
:grep
的任何参数,在本例中:

'foo\ bar' *.js
然后,如果在
&grepprg
中有一个
$*
,它将替换为给定的参数:

grep -n 'foo\ bar' *.js /dev/null
或者,如果
&grepprg
中没有
$*
,则将给定的参数附加到它,然后才将整个命令发送到shell

$*
表示“在此命令中,我特别希望用户提供的参数显示在此处”


至于
$*
$
*
的含义没有内在含义,
$*
可能是
$$$占位符$$$$
或任何东西<选择code>$*可能是因为它在shell脚本中用于表示给定给函数或脚本的所有参数,这与
&grepprg
中使用
$*

时发生的情况有点接近,我不确定除了您已经引用的内容之外还需要什么样的解释:

允许占位符“$*”指定将包含参数的位置

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

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

:grep 'foo\ bar' *.js
按下
后,Vim将获取您提供给
:grep
的任何参数,在本例中:

'foo\ bar' *.js
然后,如果在
&grepprg
中有一个
$*
,它将替换为给定的参数:

grep -n 'foo\ bar' *.js /dev/null
或者,如果
&grepprg
中没有
$*
,则将给定的参数附加到它,然后才将整个命令发送到shell

$*
表示“在此命令中,我特别希望用户提供的参数显示在此处”


至于
$*
$
*
的含义没有内在含义,
$*
可能是
$$$占位符$$$$
或任何东西<选择code>$*可能是因为它在shell脚本中用于表示给定给函数或脚本的所有参数,这与使用
$*

&grepprg
中发生的情况有点接近,非常感谢您的详细解释!我想我对
$*
想得太多了。当我在我的原始帖子中说“我理解它们的意思”时,我将它们分别解释为
$
---行尾和
*
---左侧的零个或多个字符实例,如regex。但显然我不知道shell脚本中的
$*
的常规用法。非常感谢您的详细解释!我想我对
$*
想得太多了。当我在我的原始帖子中说“我理解它们的意思”时,我将它们分别解释为
$
---行尾和
*
---左侧的零个或多个字符实例,如regex。但显然,我不知道shell脚本中的
$*
的常规用法。