From: andy.am@... Date: 2020-08-20T08:14:21+00:00 Subject: [ruby-core:99655] [Ruby master Bug#17126] String#gsub fails to escape single quote for shell Issue #17126 has been updated by AndyMaleh (Andy Maleh). Got it. I missed that completely in the documentation, thinking it wasn't related to our use of `\'`. Thanks a lot for explaining and for supporting the Ruby programming language in the open-source community. ---------------------------------------- Bug #17126: String#gsub fails to escape single quote for shell https://bugs.ruby-lang.org/issues/17126#change-87138 * 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: