带参数的Bash别名失败

带参数的Bash别名失败,bash,grep,alias,Bash,Grep,Alias,我运行以下命令搜索文件中的文本并显示漂亮的输出: $ grep -rnI "SEARCHTERM" . | sed 's/\:\s\+/\:\n/g' ./path/filename.php:LINENUMBER: This line contains SEARCHTERM 但当我尝试将其作为别名运行时,会出现一个错误: $ alias lookfor="grep -rnI '\\!^' . | sed 's/\:\s\+/\:\n/g'" $ lookfor SEARCHTERM sed:

我运行以下命令搜索文件中的文本并显示漂亮的输出:

$ grep -rnI "SEARCHTERM" . | sed 's/\:\s\+/\:\n/g'
./path/filename.php:LINENUMBER:
This line contains SEARCHTERM
但当我尝试将其作为别名运行时,会出现一个错误:

$ alias lookfor="grep -rnI '\\!^' . | sed 's/\:\s\+/\:\n/g'"
$ lookfor SEARCHTERM
sed: can't read SEARCHTERM: No such file or directory
有没有想过为什么我的别名会失败?我敢肯定这是某种引用问题…

Bash(恼人的是,IMHO)不支持别名参数。相反,我建议将您想要的作为函数编写(功能更强大):


从长远来看,功能更好。。。如果您愿意,他们会让您稍后扩展它以进行错误处理等。

我最终创建了一个
~/bin文件夹
,并在其中放置了一个名为
lookfort
的可执行文件,其内容如下:

#!/bin/sh
grep -rnI "$1" . | sed 's/\:\s\+/\:\n/g'
我的发行版已确认
~/bin
文件夹位于路径中,但对于那些没有自动设置此文件夹的用户,您可以通过将以下内容放入
~/.bashrc
中,将其添加到路径中:

if [ -d ~/bin ] ; then
    PATH=~/bin:"${PATH}"
fi
“$@”是什么意思?它是否等于.bashrc中的$PWD?另外,当我执行类似的操作时,这个脚本似乎不起作用(它一直在等待搜索路径的给定):函数igrep(){grep-r$1“$@”| grep-v.svn”}
“$@”
代表“替换为给定给命令的所有参数”。因为
$@
在引号中,所以它还表示“如果需要引用,请正确引用每一个”。例如,如果键入
查找“foo-bar”baz
,则
“foo-bar”baz
(包括引号)将传递给grep命令。(它的实现稍微复杂一些,但您仍然可以这样考虑)。
if [ -d ~/bin ] ; then
    PATH=~/bin:"${PATH}"
fi