1

我想制作一个小脚本来节省我的打字时间,但不幸的是我没有得到任何输出:

#!/bin/bash
grep  -Hnr \"$1\" --include \"*cpp\" --include \"*h\" $2

我玩了很多echo和不同的引号用法,并说服自己这行真的扩展成我想要的,但我真正能得到任何输出的唯一方法是这样:

#!/bin/bash
GREP="grep  -Hnr \"$1\" --include \"*cpp\" --include \"*h\" $2"
echo $GREP | bash

一个示例用法是:

srcgrep "dynamic_cast" src

我已经在一个简单的示例目录中尝试了这个,以排除链接、权限等任何奇怪的东西。所以,我当然可以只使用第二个,但知道第一种情况有什么问题吗?谢谢。

$ grep -V
grep (GNU grep) 2.5.1
...

$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
...
4

2 回答 2

3

为什么不只是:

#!/bin/bash
grep  -Hnr "$1" --include "*cpp" --include "*h" $2

?

于 2012-12-13T14:51:39.870 回答
2

因此,GNU 或其他人找到了一种用完全不合适的选项来搞砸 grep 的方法。惊人的。他们真的应该考虑“做一件事,做好”的 UNIX 哲学。grep 用于在文件中搜索文本,而不是用于查找文件。有一个非常好的命令,其名称有点明显,用于查找文件。

find "$2" -name '*cpp' -o -name '*h' -exec grep -Hnr "$1" {} \;

假设您发布的示例中的“$2”是目录名而不是文件名,因为您希望 grep 可以处理。

于 2012-12-13T15:27:04.590 回答