Я собираюсь догадаться, что вы используете 1.8.В 1.8 irb
говорит следующее:
>> "asdf & asdf".gsub("&", "\\\&")
=> "asdf & asdf"
>> puts "asdf & asdf".gsub("&", "\\\&")
asdf & asdf
И это соответствует тому, что вы видите.Но, если вы добавите еще одну обратную косую черту, вы получите то, что вам нужно:
>> puts "asdf & asdf".gsub("&", '\\\\&')
asdf \& asdf
Четвертый подход с обратной косой чертой дает мне одинаковый экранированный амперсанд как в 1.9.2, так и в 1.8.7, такдо четырех (не одиннадцать, подойдут только четыре).