2013-10-16 13 views
8

Ich weiß, Sie können Sonderzeichen mit "\" s entkommen, aber ich bin interessant beim Erstellen von Befehlen, die an das Terminal gehen, die Sonderzeichen enthalten, und diese können die Backslashes nicht gut lesen.Gibt es ein R Äquivalent zu anderen Sprachen Triple Quotes?

Als vereinfachtes Beispiel, würde Ich mag einen Befehl haben, die wie folgt aussieht:

echo hello "w" or'l'd 

, die durch so etwas wie

system(command="""echo hello "w" or'l'd""") 

Aber R nicht behandelt dreifache Anführungszeichen erreicht werden könnte . Gibt es eine andere Art und Weise? Sogar die Ausgabe von cat() würde in Ordnung sein. z.B. newCommand = cat ("echo hallo" w "orld")

Danke.

+0

ooh, durch einen Apostroph an den String Hinzufügen härter Sie schaffte es gerade und @ flodel Antwort für ungültig erklärt (die für die ursprüngliche Version Ihrer Frage richtig war) ... –

+0

es ist schwieriger, als nur die Schrägstriche verwendet (die, wie unten dargelegt, nicht wirklich intern in der Zeichenkette enthalten sind, nur in Rs gedruckter Darstellung davon, und daher wahrscheinlich nicht so problematisch sind, wie du denkst, sind sie), aber "deparse (substitute (echo hallo" w ") oder 'l' d ')) '' funktioniert ... –

Antwort

7

Sie die " mit \" entweichen kann. Ich würde auch shQuote verwenden, wenn Sie Systembefehle ausführen möchten. Es kümmert sich um die für Sie relevanten entkommen ...

shQuote("hello \"w\" orld" , type = "cmd") 
#[1] "\"hello \\\"w\\\" orld\"" 

Sie sollten sich bewusst sein, dass das, was Sie auf dem Bildschirm in der R-Interpreter sehen nicht genau das, was die Schale sehen .. z.B.

paste0("echo " , shQuote("hello \"w\" orld" , type = "sh")) 
#[1] "echo 'hello \"w\" orld'" 

system(paste0("echo " , shQuote("hello \"w\" orld" , type = "sh"))) 
#hello "w" orld 
+1

Ich denke, dass Sie 'shQuote' verwenden müssten:' system (command = paste0 ("echo", shQuote ("hallo \" w \ "orld ", type =" cmd ")))'. Wenn ich richtig verstehe, ist 'shQuote' für Strings, die an einen Befehl übergeben werden, ohne einen Befehl selbst. – juba

+0

@juba danke, du hast absolut recht. Ich habe das aktualisiert. Prost –

3

können Sie einfache Anführungszeichen verwenden:

system(command='echo hello "w" orld')