[ruby-core:99655] [Ruby master Bug#17126] String#gsub fails to escape single quote for shell
From:
andy.am@...
Date:
2020-08-20 08:14:21 UTC
List:
ruby-core #99655
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: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>