由于 egrep 本质上是 grep -EI,因此可以认为它是一个使用该选项调用 grep 的别名。然而在我的系统上
file `which egrep`
显示它是可执行文件。另外,egrep 作为别名仅egrep
使用颜色选项调用。为什么它不是别名?他们为 egrep 编译了单独的二进制文件吗?
只是好奇...
答案1
这取决于操作系统和安装的 grep 工具的版本。
以下是我碰巧可以访问的系统的一些示例:
Ubuntu 11.04,GNU grep 2.6.3:/bin/grep、/bin/fgrep 和 /bin/egrep 是三个大小不同的可执行文件。
GNU grep 2.10(几天前刚刚发布),从源代码构建:相同。
Cygwin:一样。
CentOS 5.6(Red Hat 的克隆版),GNU grep 2.5.1:/bin/egrep 和 /bin/fgrep 是 /bin/grep 的符号链接。
GNU grep 2.5.1 从源代码构建:egrep 和 fgrep 是调用 grep 的小型 shell 脚本。
Solaris 9:三个不同的文件(Solaris 工具,不是 GNU)。
答案2
它们曾经是单独的可执行文件,但现在通常是一个可执行文件,其中三个硬链接(“grep”、“fgrep”和“egrep”)都指向同一个程序:该程序检查它以哪个名称启动,并相应地运行。
因此,你运行的是一个增强版的 egrep,它包含了另外两个程序的功能:并使用不同的名称来调用它,或者使用-E为您提供您所期望的功能。
如果你输入
ls -i `which grep`
同样适用于命令行工具和egrep您可能会看到它们都具有相同的 inode 编号,这意味着它们都是同一个文件。
答案3
在 Ubuntu 18.04cat /bin/egrep
输出
#!/bin/sh
exec grep -E "$@"