在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.
答案 0 :(得分:0)
问题仅仅是GNU grep和BSD grep之间的不兼容。请参阅@ that-other-guy对帖子的评论。
我的困惑是由于我设置了使用GNU grep的别名。否则,在命令行和脚本中执行此操作没有区别。