В bash, в Terminal на моем Mac (но не в 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
FWIW на моем Mac, если я изменю '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.