fgrep 或 grep -F,哪一个更适合可移植脚本?

fgrep 或 grep -F,哪一个更适合可移植脚本?

我对这个有争议的评论这个答案对于我们是否应该使用的问题或者带有-F开关(即grep -F)以实现便携性。到目前为止,已经发现的要点是:

grep -F:

  • 是 POSIX 标准。
  • GNUgrep已宣布fgrep弃用。

fgrep:

  • 从历史上看,它出现在grep -F选项之前。
  • 尽管 GNU grep 声明fgrep已被弃用,但他们似乎仍然坚持使用它,因为它的历史用途。

如果您考虑旧的(非常旧的)系统,那么您可能会发现其中一些系统没有grep -F(我认为这种情况发生的机会非常罕见)。但是我们真的需要担心那些非常非常旧的机器并为此避免 POSIX 标准吗?

如果考虑到目前的情况,包括那些旧机器(据说/据称没有grep -F),那么支持的系统fgrep会更多。

另一方面,如果展望未来,fgrep它将成为历史,并grep -F作为 POXIS 标准取得胜利。

而且,使用 POSIX 标准以获得更好的可移植性现在不是常识吗?

答案1

grep -F是 POSIX。fgrep不是。使用grep -F并明确您的脚本依赖于 POSIX grep。您所需要的就是明确声明的依赖关系。

我想你可以同时使用...

if    command -v fgrep 
then  _grepf(){ fgrep "$@"; }
else  _grepf(){ grep -F "$@"; }
fi    >/dev/null

...但是做这样的事情是很麻烦的,而且通常是浪费时间。在依赖项列表中设置最低的一致性级别,并允许标准处理其余部分。

相关内容