Grep espera que o comando no formato grep [options] PATTERN [FILE...]
trate a segunda string como um arquivo para examinar. Se for apenas uma linha, você pode enviá-la no stdin.
echo $haystack | grep $needle
Ou como preferir. Talvez com uma string aqui:
grep $needle <<< $haystack