Maybe you are bing confused by the way irb displays results as double =
quoted strings.  If you explicitly use puts:

ratdog:~ mike$ irb
1.9.3-p125 :001 > s =3D 'a&b'
 =3D> "a&b"=20
1.9.3-p125 :002 > puts s.gsub '&', '\&'
a&b
 =3D> nil=20
1.9.3-p125 :003 > puts s.gsub '&', '\\&'
a&b
 =3D> nil=20
1.9.3-p125 :004 > puts s.gsub '&', '\\\&'
a\&b
 =3D> nil=20
1.9.3-p125 :005 > puts s.gsub '&', '\\\\&'
a\&b
 =3D> nil=20

I like using a block to make this situation less full of backslashes =
e.g.

1.9.3-p125 :006 > puts s.gsub('&') { '\&' }
a\&b

To see the way irb displays strings consider:

1.9.3-p125 :008 > s =3D 'a\&b'
 =3D> "a\\&b"=20
1.9.3-p125 :009 > puts s
a\&b
 =3D> nil=20
1.9.3-p125 :010 > puts s.length
4
 =3D> nil=20
1.9.3-p125 :011 > s =3D "a\tb"
 =3D> "a\tb"=20
1.9.3-p125 :012 > puts s
a	b
 =3D> nil=20

Hope this helps,

Mike

On 2012-05-20, at 9:19 AM, hadmut (Hadmut Danisch) wrote:

>=20
> Issue #6474 has been reported by hadmut (Hadmut Danisch).
>=20
> ----------------------------------------
> Bug #6474: Substitution bug in String # gsub
> https://bugs.ruby-lang.org/issues/6474
>=20
> Author: hadmut (Hadmut Danisch)
> Status: Open
> Priority: Normal
> Assignee:=20
> Category:=20
> Target version:=20
> ruby -v: ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-linux]
>=20
>=20
> Hi,
>=20
> I need to replace all occurences of &  with \&  in a String =
(generating LaTeX input).=20
>=20
> However, gsub has a problem with unescaping the \ character in the =
replacement string:
>=20
> irb(main):001:0> "a&b"
> =3D> "a&b"
> irb(main):002:0> "a&b".gsub('&','\&')
> =3D> "a&b"
> irb(main):003:0> "a&b".gsub('&','\\&')
> =3D> "a&b"
> irb(main):004:0> "a&b".gsub('&','\\\&')
> =3D> "a\\&b"
> irb(main):005:0> "a&b".gsub('&','\\\\&')
> =3D> "a\\&b"
>=20
> So it always inserts either zero or two \ characters, but never a =
single one. Not possible to generate "a\&b"
>=20
>=20
> regards
>=20
>=20
>=20
>=20
> --=20
> http://bugs.ruby-lang.org/

--=20

Mike Stok <mike / stok.ca>
http://www.stok.ca/~mike/

The "`Stok' disclaimers" apply.