No utilice métodos múltiples, es sencillo.
Escape the #, la barra invertida y la comilla doble.
irb(main):001:0> foo = "`[email protected]\#$%^&*()_-+={}|[]\\:\";'<>?,./"
=> "`[email protected]\#$%^&*()_-+={}|[]\\:\";'<>?,./"
O si no quieres escapar del # (el carácter de sustitución de las variables en cadenas entre comillas dobles), usar y escapar comillas simples:
irb(main):002:0> foo = '`[email protected]#$%^&*()_-+={}|[]\\:";\'<>?,./'
=> "`[email protected]\#$%^&*()_-+={}|[]\\:\";'<>?,./"
% q es ideal para muchas otras cadenas que no contienen todos los caracteres de puntuación ascii. :)
%q(text without parens)
%q{text without braces}
%Q[text without brackets with #{foo} substitution]
Editar: Evidentemente que se puede utilizar parens equilibradas dentro de% q() con éxito, así, pero yo creo que es un poco peligroso desde el punto de vista del mantenimiento, ya que no hay ninguna semántica allí dar a entender que siempre estás va a equilibrar necesariamente tus pares en una cadena.
En realidad, '% q()' funciona bien incluso si el texto interno tiene paréntesis, siempre que los paréntesis internos estén balanceados: 'bal =% q (foo (())) – Telemachus
No hay necesidad de escapar * nada *. '% q {\' ~! @ # $%^& *() _- + = {} | [] \: "; '<>?,. /}' funciona bien. – Borodin