grep version: 2.20
zgrep version: 1.5

$cat test1
hello

$cat test2
goodbye

$cat test3
goodbye

$cat test4
goodbye

$grep "hello" test1     #works as expected
hello
$echo $?
0

$grep "goodbye" test1     #works as expected
$echo $?
1

$grep "hello" *    #works as expected. gets line from test1 and returns 0
test1:hello
$echo $?
0

$grep "goodbye" *    #works as expected. gets lines from test2, 3, and 4 and returns 0
test2:goodbye
test3:goodbye
test4:goodbye
$echo $?
0


despite stating zgrep works the same as grep, the return codes over multiple files are different

$zgrep "hello" test1     #works as expected
hello
$echo $?
0

$zgrep "goodbye" test1     #works as expected
$echo $?
1

$zgrep "hello" *    #does NOT work as expected. gets line from test1 and returns 1. grep states that if ANY line is found, 0 will be returned
test1:hello
$echo $?
1

$zgrep "goodbye" *    #does NOT work as expected. gets lines from test2, 3, and 4 and returns 1. grep states that if ANY line is found, 0 will be returned
test2:goodbye
test3:goodbye
test4:goodbye
$echo $?
1

$zgrep "goodbye" test2 test3 test4    #works as expected. finds pattern in all files and returns 0. bug only occurs if files exist where the pattern is not found
test2:goodbye
test3:goodbye
test4:goodbye
$echo $?
0