我对这个有争议的评论这个答案对于我们是否应该使用的问题fgrep或者grep带有-F
开关(即grep -F
)以实现便携性。到目前为止,已经发现的要点是:
grep -F
:
- 是 POSIX 标准。
- GNU
grep
已宣布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
...但是做这样的事情是很麻烦的,而且通常是浪费时间。在依赖项列表中设置最低的一致性级别,并允许标准处理其余部分。