0

我有这个别名:

alias gi='grep -r -i $1 ./*'

当我做

gi someString

它执行 grep,但在我提供的字符串之外的其他字符串上,通常带有“p/”或其他类似的东西。

我正在使用类似的东西来获取历史记录:

alias gh='history | grep $1'

效果很好。

编辑:根据 echo $SHELL,我在 /bin/bash shell 上。

谢谢!

4

3 回答 3

2

alias机制仅代替一个词。同一行上的任何其他单词都保留在原处,因此通常只需替换命令并保留参数。这不适用于您的grep示例,因为您想重新排列该行。

现在,$1将引用shell 进程(或shell 函数)参数,在任何一种情况下,都不是在同一行上键入的单词。

在这种情况下,最好使用 shell函数,它应该适用于任何 Posix shell,包括 bash。

gi () {
  grep -r -i "$1" ./*
}
于 2013-02-06T16:51:31.947 回答
1

您不能将参数传递给alias,请参阅此帖子了解详细信息。你需要的是一个函数。尝试一下:

function gi() {
grep -r -i "$1" ./*
}

希望这可以帮助!

PS:至于为什么alias gh='history | grep $1'起作用是因为它与alias gh='history | grep. 静态$1设置时展开。alias

于 2013-02-06T16:53:02.260 回答
0

试试这个别名:

alias gi='find . | xargs grep -i'

如果您仍然只想使用别名来解决您的问题,这将起作用。

于 2013-02-06T16:50:31.653 回答