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

Jah*_*hid 3 grep posix

对于我们是否应该将与开关(即)一起使用以实现可移植性的问题的答案,我有这个有争议的评论。到目前为止已经曝光的要点是:-Fgrep -F

grep -F

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

fgrep

  • 从历史上看,它出现在grep -F选项之前。
  • 尽管 GNU grep 宣布fgrep已弃用,但由于其历史用途,他们似乎仍坚持使用它。

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

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

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

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

mik*_*erv 6

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

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

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

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