12

我知道您可以使用“\”转义特殊字符,但我对创建将进入包含特殊字符的终端的命令很感兴趣,这些命令不能很好地读取反斜杠。

作为一个简化的例子,我想要一个看起来像这样的命令:

echo hello "w" or'l'd

这可以通过类似的东西来实现

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

但是 R 不处理三引号。还有其他方法吗?即使从 cat() 捕获输出也可以。例如 newCommand = cat("echo hello \"w\" orld")

谢谢。

4

4 回答 4

7

你可以逃避"with \"shQuote如果您的意图是运行系统命令,我也会使用。它会为您处理相关的转义...

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

您应该知道,您在 R 解释器中在屏幕上看到的内容并不完全是 shell 将看到的内容。例如

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
于 2013-10-16T21:06:16.143 回答
3

您可以使用单引号:

system(command='echo hello "w" orld')
于 2013-10-16T21:03:52.820 回答
2

2020-04-27 发布的 R 4.0.0 中引入了原始字符:

有一种用于指定原始字符常量的新语法,类似于 C++ 中使用的语法:r"(...)" with ... 任何不包含序列 '⁠)"⁠' 的字符序列。这样更容易编写包含反斜杠或同时包含单引号和双引号的字符串。有关更多详细信息,请参阅 ?Quotes。

> cat(r"(echo hello "w" or'l'd)")
echo hello "w" or'l'd
于 2021-12-29T02:53:34.257 回答
0

图书馆(胶水)

glue('echo hello "w" or{single_quote("l")}d')

或者

glue('echo hello "w" or{l}d', l = "'l'")
于 2020-09-18T22:09:34.170 回答