正木です。

RubyとZshにおけるシングルクォート内のバックスラッシュの挙動を誤解していた
(Rubyは'直前以外の、Zshは全てのバックスラッシュをそのままにするのだと理解していた)
のが原因だったようです。お恥ずかしい…

$ print '\(Ruby Users\)'
(Ruby Users)

全くそのとおりでした。

ありがとうございました。

You wrote:
> こんにちは、なかむら(う)です。
> 
> In message "[ruby-list:50152] String.deleteでバックスラッシュの削除"
>   on Wed, 13 May 2015 20:53:29 +0900, yek / reasonset.net wrote:
> > 文字列中のバックスラッシュを削除しようとして
> > 
> > mailobj.list = $1.delete('"\<>/!?')
> 
> String#deleteの引数は単にその文字列中の文字を意味するのではな
> くて、- と ^ に特別な意味があり、またこの2文字を普通の文字と
> して扱うために \ にエスケープの意味が与えられています。
> そのため、\ は末尾に置かれた場合以外では \ という文字そのもの
> としては解釈されませんので、2重に重ねる必要があります。
> 
> なのですが、
> 
> > mailobj.list = $1.delete('"\\<>/!?')
> > 
> > でも残り、
> 
> ややこしいことに、単に文字列リテラル中に \\ と書いても、それ
> 文字列リテラルのエスケープ表記とみなされて、結局 \ 一文字にな
> ってしまうため、\ と書いても \\ と書いても同じことになります。
> (後続の文字によっては異なることもありますが、とりあえずこの場
> 合はそう)
> 
> というわけで、正解は
> 
>   $1.delete('"\\\\<>/!?')
> 
> と書く、ということになります。
> 
> もちろん、先に書いたように \ は末尾に置かれた場合はエスケープ
> の意味を失いますので、
> 
> > mailobj.list = $1.delete('"<>/!?\\')
> 
> も正解です。
> 
> 
> > にすると消えるのですが、コマンドライン上でシンプルにテストすると
> > 
> > print '\(Ruby Users\)' | ruby -e 'p STDIN.read.delete('"'"'\<>/\!?'"')"
> > 
> > であっても消えます。
> > これは一体何でしょう??
> 
> シェルが食べちゃってますから、単に
> 
>   print '\(Ruby Users\)'
> 
> だけでもう消えてると思いますよ。Rubyは何もしてません。
> 
> 
> それでは。


******************************
* The Rider, Hacker and Musician.
* +++ ENABLE YOUR HEART +++
******************************
*           MASAKI Yuhsuke.
* yek / reasonset.net
* Website: http://reasonset.net/
* GitHub : https://github.com/reasonset/
* Twitter: @reasonset
******************************