使用grep -E和变量

时间:2013-09-06 10:35:55

标签: bash shell

我正在尝试使用find进行搜索并将结果传递给grep。 Grep必须找到与string1和string2以及string3匹配的文件。

我有以下命令:

#/bin/bash
searchpath="/home/myfolder"
string1="abc"
string2="def"
string3="ghi"
find `echo "${searchpath}"` -type f -print0 | xargs -0 grep -l -E '"${string1}".*"${string2}".*"${string3}"'

但结果是空白的,但是当我这样做时:

find /home/myfolder -type f -print0 | xargs -0 grep -l -E 'abc.*def.*ghi'

我得到了结果。我做错了什么?

1 个答案:

答案 0 :(得分:2)

从行中删除单引号:

find `echo "${searchpath}"` -type f -print0 | xargs -0 grep -l -E '"${string1}".*"${string2}".*"${string3}"'

即,说:

find "${searchpath}" -type f -print0 | xargs -0 grep -l -E "${string1}".*"${string2}".*"${string3}"

会奏效。当您用单引号括起来时,shell会将其解释为:

"${string1}".*"${string2}".*"${string3}"

(不扩展变量)

而且,你不需要说

`echo "${searchpath}"` 

"${searchpath}"

就足够了。