2013-10-16 13 views
8

"\" karakterleriyle özel karakterlerden kurtulabileceğinizi biliyorum, ancak özel karakterler içeren terminale gidecek komutlar oluştururken ilginç oluyorum ve bunlar ters eğik çizgileri iyi okuyamaz. basitleştirilmiş bir örnek olarak Diğer dillere göre üç eşdeğer R harfi var mı?

, ben görünen bir komut yaptırmak istiyorum gibi:

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

Ama R üç çift tırnak işlemez gibi bir şey elde edilebilir

echo hello "w" or'l'd 

. Başka bir yolu var mı? Hatta kedi() çıkışını yakalamak iyi olurdu. Örneğin. newCommand = cat ("echo merhaba \" w \ "orld")

Teşekkürler.

+0

ooh, dizeye tek alıntı ekleyerek sadece daha da güçleştirmiştir ve (Sorunuzun ilk sürümü için doğru) flodel cevabı ... –

+0

o (sadece ters eğik çizgi kullanarak daha zor @ geçersiz Aşağıda belirtildiği gibi aslında dizgeye dahili olarak dahil edilmez, sadece R'nin basılmış haliyle gösterilir ve bu yüzden muhtemelen düşündüğünüz kadar problemli değildir, ama 'deparse (yerine ("echo merhaba" w ") ya da 'l' d ')) '' işleri ... –

cevap

7

Sen \" ile " kaçabilir. Niyetiniz sistem komutlarını çalıştırmaksa shQuote'u da kullanırdım. Bu ...

shQuote("hello \"w\" orld" , type = "cmd") 
#[1] "\"hello \\\"w\\\" orld\"" 
Sen ekrandaki R tercüman gördüklerinizi kabuk göreceksiniz tam olarak ne olmadığını bilmelidir

.. mesela sizin için kaçan ilgili ilgilenir

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

Yapacağım' shQuote 'kullanmak zorundayım: 'system (command = paste0 (" echo ", shQuote (" merhaba \ "w \" orld) ", type =" cmd "))). Eğer doğru bir şekilde anlarsam, shQuote, bir komutun kendisinde olmayan bir komuta iletilen diziler içindir. – juba

+0

@juba teşekkürler, kesinlikle haklısınız. Bu etkiyi güncelledim. Şerefe –

3

Sen tek tırnak kullanabilirsiniz:

system(command='echo hello "w" orld') 
İlgili konular