Forum: Ruby irb and single quoted strings

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
James B. (Guest)
on 2009-02-05 22:51
This is the problem:

irb(main):002:0> x = '--rails --exclude something_is_not_right
=> "--rails --exclude something_is_not_right \\/usr\\/lib,test\\/lib"

irb(main):004:0> p x
"--rails --exclude something_is_not_right \\/usr\\/lib,test\\/lib"

How do I get a literal string like /usr\/lib,test\/lib into a variable?
Where are these extra '\' artifacts coming from?
F. Senault (Guest)
on 2009-02-05 23:18
(Received via mailing list)
Le 5 février 2009 à 21:50, James B. a écrit :

> How do I get a literal string like /usr\/lib,test\/lib into a variable?
> Where are these extra '\' artifacts coming from?

It's just the representation.  IRB always shows strings double quoted,
and, in double quotes, a lone \ has to be escaped.

A small example is perhaps more convincing :

22:10 fred@balvenie:~% irb
>> x = '\/usr\/lib'
=> "\\/usr\\/lib"
>> x.length
=> 10
>> '\/usr\/lib' == "\\/usr\\/lib"
=> true


Tim G. (Guest)
on 2009-02-05 23:22
(Received via mailing list)
James B. wrote:

> variable? Where are these extra '\' artifacts coming from?
You have it right, it's just irb that backwacks it in response.

irb(main):004:0> x = '--rails -exclude something_is_not_right
=> "--rails -exclude something_is_not_right \\/usr\\/lib,test\\/lib"
irb(main):005:0> puts x
--rails -exclude something_is_not_right \/usr\/lib,test\/lib
=> nil
Jayce M. (Guest)
on 2009-02-05 23:27
(Received via mailing list)
\ is an escape character for strings. For example, using

a = 'Today is the day, I'm going to New Jersey'

is interpreted as

a = 'Today is the day, I'    m going to New Jersey    '

This tosses an error because the interpreter assumes the apostrophe in
is the end of the string. The \ escapes that apostrophe so that it's
text in the string, not a Ruby operator. The above line would also error
because 'm', 'going', 'to', 'new', and 'jersey' are unknown methods, and
then also because the last ' was read as the beginning of another
causing the string to run to the end of the file and the interpreter
at you because the string wasn't terminated. (In other contexts it would
until the next occurrence of the ' character, tossing other errors.)

Same thing happens with the backslash.

\ = Escape character
\\ = \ in a string


irb(main):001:0> puts "c:\documents"
=> nil

Here the \ is merely an escape character and thus does nothing since
no special characters after it. On the other hand:

irb(main):002:0> puts "c:\\documents"
=> nil

The \\ becomes \ because it used the first backslash as the escape
for the second backslash.

I hope that helps.

 - jayce

From: "James B." <removed_email_address@domain.invalid>
Sent: Thursday, February 05, 2009 12:50 PM
Newsgroups: comp.lang.ruby
To: "ruby-talk ML" <removed_email_address@domain.invalid>
Subject: irb and single quoted strings
This topic is locked and can not be replied to.