[Rd] [R] shQuote and cat
simon.urbanek at r-project.org
Thu Jul 24 03:08:58 CEST 2008
On Jul 23, 2008, at 4:46 PM, Vadim Organovich wrote:
> It is precizely a shell command that I am trying to generate. To be
> specific let's try to have R 'output' the following shell command:
> 'echo "\"a\""'. This is is a valid command, at least in bash:
> bash-3.2$ echo "\"a\""
> Now in R:
>> x <- 'echo "\"a\""'
>> cat(x, '\n')
> echo ""a""
>> cat(shQuote(x), '\n')
> "echo \"\"a\"\""
> Whichever way you do it it is not right.
Well, you input is not right ('\"' is parsed in R into '"') - you have
to escape the backslash that you want to keep and all is well:
> x <- 'echo "\\"a\\""'
> cat(x, '\n')
> cat(shQuote(x), '\n')
> system(paste("sh -c",shQuote(x,type="sh")))
> Again I think cat('echo "\"a\""') should be printing *echo "\"a\""*
> (asterics are not a part of the output)
> From: Duncan Murdoch [murdoch at stats.uwo.ca]
> Sent: Wednesday, July 23, 2008 2:38 PM
> To: Vadim Organovich
> Cc: r-devel at r-project.org
> Subject: Re: [Rd] [R] shQuote and cat
> On 7/23/2008 2:53 PM, Vadim Organovich wrote:
>> I feel like it now belongs to r-devel more than to r-help.
>> My output was garbled because I sent the original message as HTML,
>> sorry about that.
>> Your output, "\"\\"a\\"\"", is what I get too. That is
>>> cat(shQuote(shQuote(shQuote("a"))), '\n')
>> , which I think should be "\"\\\"a\\\"\"".
>> Actually, the R's output, "\"\\"a\\"\"", is not even a valid string
>> literal, that is
>>> x <- "\"\\"a\\"\""
> It's not intended to be a string literal in R, it's intended to be
> to the Windows CMD shell. If you want a string literal in R, don't
> cat(). cat() shows you the naked contents of the string without any
> quoting to make it a valid string literal.
>> Now, by cat() being the inverse of shQuote() I mean printing the
>> same literal as it goes into shQuote, quotes included:
>>> cat(shQuote("a"), '\n')
>>> cat("a", '\n')
>> a ## no quotes
>> If cat() is not the inverse of shQuote() in the above sense, what is?
> On Unix-like systems I think asking the shell to echo the output, i.e.
> system(paste("echo", shQuote(input)), intern=TRUE)
> is intended to reproduce the input. However, the Windows CMD shell is
> different. I don't know how to strip quotes off a string in it,
> e.g. I see
> C:\WINDOWS\system32 echo "a"
> Nevertheless, the quotes *are* necessary when passing filenames to
> commands, and they'll typically be stripped off when doing that, e.g.
> echo hi >"a"
> will create a file named a, not named "a", and
> echo hi >"a b"
> will create a file with a space in the name.
> Duncan Murdoch
> Note: This email is for the confidential use of the named
> addressee(s) only and may contain proprietary, confidential or
> privileged information. If you are not the intended recipient, you
> are hereby notified that any review, dissemination or copying of
> this email is strictly prohibited, and to please notify the sender
> immediately and destroy this email and any attachments. Email
> transmission cannot be guaranteed to be secure or error-free. Jump
> Trading, therefore, does not make any guarantees as to the
> completeness or accuracy of this email or any attachments. This
> email is for informational purposes only and does not constitute a
> recommendation, offer, request or solicitation of any kind to buy,
> sell, subscribe, redeem or perform any type of transaction of a
> financial product.
> R-devel at r-project.org mailing list
More information about the R-devel