From: merch-redmine@... Date: 2020-08-19T17:57:10+00:00 Subject: [ruby-core:99647] [Ruby master Bug#17126] String#gsub fails to escape single quote for shell Issue #17126 has been updated by jeremyevans0 (Jeremy Evans). Status changed from Open to Closed `\'` means something special in a sub/gsub replacement string, see the documentation for details: https://docs.ruby-lang.org/en/2.7.0/String.html#method-i-gsub As the documentation explains, use four backslashes: ```ruby puts "Hello ' World".gsub(/'/, "'\\\\''") # Output: # Hello '\'' World ``` ---------------------------------------- Bug #17126: String#gsub fails to escape single quote for shell https://bugs.ruby-lang.org/issues/17126#change-87128 * Author: AndyMaleh (Andy Maleh) * Status: Closed * Priority: Normal * ruby -v: 2.7.1 * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- 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, 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 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 is duplicating the substring following 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 -- https://bugs.ruby-lang.org/ Unsubscribe: