Bug #17126
Updated by AndyMaleh (Andy Maleh) over 4 years ago
Hi, I don't know if I'm misunderstanding how `String#gsub` works, but I encountered an issue in the Ruby "git" gem with escaping single quotes for shell, quotes, which I fixed and [contributed back](https://github.com/ruby-git/ruby-git/pull/480). I thought I'd report here too since it was caused by Ruby `String#gsub` malfunctioning, just malfunctioning in case there is a bug in Ruby. **Description:** When calling `String#gsub("'", "'\\''")` on a String that contains a single-quote (e.g. `"Hello ' World"`), it `String#gsub(str, replacement)` is duplicating the a substring following outside the single-quote in the returned String instead of simply replacing the single-quote with escaped single quotes. **Code to Demonstrate Problem:** ```ruby "Hello ' World".gsub('\'', '\'\\\'\'') ``` or ```ruby "Hello ' World".gsub("'", "'\\''") ``` or ```ruby "Hello ' World".gsub(/'/, "'\\''") ``` **Output:** ``` => "Hello ' World' World" ``` **Expected Output:** ``` => "Hello '\'' World" ``` In fact, I tested this same regex replacement in Java and got the expected output above. I look forward to hearing back about this puzzling problem. Perhaps it is not a bug and I am just misunderstanding how `String#gsub` works in Ruby as I noticed it behaves the same exact way in JRuby too. Best regards, Andy Maleh