As regras são diferentes para aspas simples versus aspas duplas.
Pelo motivo que você mostra, aspas duplas não podem ser usadas de forma confiável no bash, porque não há uma maneira sã de escapar de um ponto de exclamação.
$ grep -oP "\(.*(?!word).*right"
bash: !word: event not found
$ grep -oP "\(.*(?\!word).*right"
grep: unrecognized character after (? or (?-
A segunda é porque o bash passa por \!
em vez de !
para grep. Mostrando isto:
$ printf '%s' "\!"
\!
Quando você tentou aspas simples, a barra invertida dupla não significa uma barra invertida de escape, isso significa duas barras invertidas.
$ printf '%s' '\(.*(?!word).*right'
\(.*(?!word).*right
Dentro de aspas simples, tudo é literal e não há escapes, então a maneira de escrever a expressão regular que você está tentando é:
$ grep -oP '\(.*(?!word).*right'