首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么egrep和grep的行为不同,尽管它们是相同的二进制文件?

为什么egrep和grep的行为不同,尽管它们是相同的二进制文件?
EN

Stack Overflow用户
提问于 2012-03-12 13:38:02
回答 4查看 204关注 0票数 0
代码语言:javascript
复制
$ ls -l /bin/*grep
lrwxrwxrwx 1 root root     4 2010-06-09 02:56 /bin/egrep -> grep
lrwxrwxrwx 1 root root     4 2010-06-09 02:56 /bin/fgrep -> grep
-rwxr-xr-x 1 root root 85060 2007-01-23 02:00 /bin/grep

$ echo 'hello' | grep -q 'l{2}' && echo YES || echo NO
NO

$ echo 'hello' | egrep -q 'l{2}' && echo YES || echo NO
YES

在我的系统中,egrep是到grep的符号链接,但它们的行为不同。为什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-12 13:54:29

grep将通过查看argv[0]来检查其调用。

下面是一个简短的演示程序:

代码语言:javascript
复制
> cat someprogram.cpp 
#include <iostream>

int main(int argc, char* argv[])
{
    std::cout << "Shall behave as " << argv[0] << "." << std::endl;
}

内部版本:

代码语言:javascript
复制
> make someprogram
g++ someprogram.cpp   -o someprogram

创建符号链接:

代码语言:javascript
复制
> ln -s someprogram some_other_program

运行一次:

代码语言:javascript
复制
> ./someprogram
Shall behave as ./someprogram.

运行两次:

代码语言:javascript
复制
> ./some_other_program 
Shall behave as ./some_other_program.

Gnu grepfree和开源软件,因此您可以自由地检查the source

票数 4
EN

Stack Overflow用户

发布于 2012-03-12 13:39:48

因为可执行文件检查argv[0]的值并相应地调整其行为。

票数 2
EN

Stack Overflow用户

发布于 2012-03-12 14:05:57

因为POSIX认为egrep等同于grep -E而不是普通的grep,而fgrep等同于grep -F而不是普通的grep。如果希望grep的行为与egrep相同,请使用grep -E,依此类推。还有大约40年的先例问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9662209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档