为什么grep在Debian和CentOs中的工作方式不同?

时间:2013-12-17 16:46:14

标签: linux grep centos debian

采用这个简单的shell函数......

function search (){
    grep -roiI --include $2 $1 . | sort -u
}

然后像这样使用它:

# search drop *.properties

在CentOs中,它将按照需要返回grep'd结果列表。然而,在Debian中,它将“* .properties”中的特殊字符解析为正则表达式,因此不能正确地进行grep。为什么Debian解析特殊字符和CentOs不是?

2 个答案:

答案 0 :(得分:1)

也许grep不是问题。它可能是一个shell扩展问题。

bash上:

Bash scans each word for the characters ‘*’, ‘?’, and ‘[’. If one of these
characters appears, then the word is regarded as a pattern, and replaced with
an alphabetically sorted list of file names matching the pattern.

答案 1 :(得分:1)

这听起来像nullglob shell选项的不同设置,它控制当你使用glob(带有通配符的东西)时会发生什么,并且没有匹配该glob的文件。启用nullglob后,这会将“ .properties”视为文件列表,即使这是一个空列表,关闭了nullglob,如果它将“ .properties”视为字符串没有匹配任何文件。您可以尝试使用shopt -u nullglob禁用nullglob,然后使用shopt -s nullglob将其重新启用。

但是,在这种情况下,如果您不希望* .properties被视为一个glob,并且您希望将此字符串直接传递到您的脚本中,那么您应该将*转义为{{1}或者你应该用双引号或单引号引用字符串:search drop \*.properties。同样,在搜索脚本中,您应该将search drop '*.properties'$2参数括在双qoutes中。