[Rd] [R] shQuote and cat
Simon Urbanek
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\""
> "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')
echo "\"a\""
> cat(shQuote(x), '\n')
'echo "\"a\""'
> system(paste("sh -c",shQuote(x,type="sh")))
"a"
Cheers,
Simon
> 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')
>> "\"\\"a\\"\""
>> , which I think should be "\"\\\"a\\\"\"".
>>
>> Actually, the R's output, "\"\\"a\\"\"", is not even a valid string
>> literal, that is
>>> x <- "\"\\"a\\"\""
>> fails.
>
> It's not intended to be a string literal in R, it's intended to be
> input
> to the Windows CMD shell. If you want a string literal in R, don't
> use
> 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')
>> "a"
>>
>> whereas
>>> 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"
> "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
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>
More information about the R-devel
mailing list