bsd grep이 왜 이렇게 동작합니까?

bsd grep이 왜 이렇게 동작합니까?
$ grep --version
grep (BSD grep) 2.5.1-FreeBSD

-o옵션 및 여러 줄 검색 모드와 함께 bsd grep을 사용하면 두 번 인쇄되는 것처럼 보이는 결과를 얻습니다. 이 동작은 GNU grep을 사용하여 재현할 수 없습니다.

$ printf '%s\n' foo foo bar bar | grep -o $'foo\nfoo'
foo
foo
foo
foo
$ echo foo | grep -o foo
foo
$ printf '%s\n' foo foo bar bar | grep -o foo
foo
foo
$ printf '%s\n' foo bar | grep -o $'foo\nfoo'
foo
foo
$ printf '%s\n' foo foo bar bar | grep $'foo\nfoo'
foo
foo
$ printf '%s\n' foo foo bar bar | grep -co $'foo\nfoo'
2

이것은 버그입니까, 아니면 다른 설명이 있습니까?

편집하다:

여러 줄 문자열이 별도의 검색 패턴으로 처리되는 것처럼 보이지만 확장 정규식을 사용할 때와 동작은 여전히 ​​다릅니다.

$ printf '%s\n' foo foo bar bar | grep -o $'foo\nbaz\nfoo'
foo
foo
foo
foo
$ printf '%s\n' foo foo bar bar | grep -Eo 'foo|baz|foo'
foo
foo
$ printf '%s\n' foo foo bar bar | grep -o -e foo -e foo
foo
foo
foo
foo
$ printf '%s\n' foo foo bar bar | grep -e foo -e foo
foo
foo
$ printf '%s\n' foo foo bar bar | grep -o -e foo -e foo -e foo
foo
foo
foo
foo
foo
foo

관련 정보