Вы можете использовать PCRE \Qliteral blocks\E
:
line='"e[?20"'; echo 'foo - "e[?20"' | grep -P "^.* - \Q$line\E$"
Каждый символ, который появляется после \Q
и до следующего \E
, будет пониматься как буквальный символ, а не как метасимвол, который он может представлять.