grep -v -f空文件,在OS X上的脚本和命令行不同

时间:2019-02-12 21:29:38

标签: bash macos bsd

在bash中,在Mac上的Terminal中(但在Linux中不是),grep -v -f的行为有所不同,具体取决于它是在命令行中执行还是在脚本中执行。从命令行:

$ touch empty-file  #create an empty file
$ printf 'foo' | grep -v -f empty-file
foo

这是预期的。但是,当该行在脚本中时,它什么也不输出。这是脚本:

$ cat grep-v-in-script.sh 
#!/usr/bin/env bash
printf 'foo\n' | grep -v -f empty-file
printf 'end of script\n'

当我执行该脚本时:

$ ./grep-v-in-script.sh 
end of script

如果我在Linux中运行相同的脚本,它将按预期工作:

herdrick@some-linux-server:~$ ./grep-v-in-script.sh 
foo
end of script

在Mac上的FWIW,如果我将'grep -v -f'更改为'grep -f',则它不会再输出任何内容,但这是预期的结果。

这是我的bash版本:

$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)
Copyright (C) 2007 Free Software Foundation, Inc.

1 个答案:

答案 0 :(得分:0)

问题仅仅是GNU grep和BSD grep之间的不兼容。请参阅@ that-other-guy对帖子的评论。

我的困惑是由于我设置了使用GNU grep的别名。否则,在命令行和脚本中执行此操作没有区别。