I stumbled over this problem using the following simplified example:

```
line = searchstring.dup
line.gsub!(Regexp.escape(searchstring)) { '' }

```

My understanding was, that for every `String` stored in `searchstring`, the `gsub!` would cause that `line` is afterwards empty. Indeed, this is the case for many strings, but not for this case:

```
searchstring =  "D "
line = searchstring.dup
line.gsub!(Regexp.escape(searchstring)) { '' }
p line

```

It turns out, that `line` is printed as `"D "` afterwards, i.e. no replacement had been performed.

This happens to any `searchstring` containing a space. Indeed, if I do a

```
p(Regexp.escape(searchstring))

```

for my example, I see `"D\\ "` being printed, while I would expect to get `"D "` instead. Is this a bug in the Ruby core library, or did I misuse the `escape` function?

Some background: In my concrete application, where this simplified example is derived from, I just want to do a literal string replacement inside a long string, in the following way:

```
REPLACEMENTS.each do
  |from, to|
  line.chomp!
  line.gsub!(Regexp.escape(from)) { to }      
end

```

. I'm using `Regexp.escape` just as a safety measure in the case that the string being replaced contains some regex metacharacter.

I'm using the Cygwin port of MRI Ruby 2.6.4.