将带有空格/特殊字符的命令传递给R System Command

时间:2019-01-31 10:04:56

标签: r regex escaping

我可以在bash shell中运行此命令。该命令向API请求以压缩图像,并从API获得响应而没有任何问题:

curl https://my.api.com --user api:mypassword --data-binary @/Users/myUsername/MyDirectoryName\ \(abc\)/test/my/file.png --dump-header /dev/stdout

在R脚本中,当我尝试在R的systemdocs)中运行相同命令时,如下所示:

system("curl https://my.api.com --user api:mypassword --data-binary @/Users/myUsername/MyDirectoryName\ \(abc\)/test/my/file.png --dump-header /dev/stdout", intern = T)

我收到一条错误消息:

Error: '\(' is an unrecognized escape in character string starting "curl https://my.api.com --user api:mypassword --data-binary @/Users/myUsername/MyDirectoryName\ \("

我无法控制目录名称及其空格和特殊字符,例如()

如何更改传递给system的命令字符串?如果这是我认为的字符转义问题,我将如何执行转义?

谢谢

1 个答案:

答案 0 :(得分:0)

@ zx8754怀疑,转义转义字符应该会有所帮助。特别是\是转义字符,而(之类的东西则不需要转义。因此,转义\应该会有所帮助:

system("curl https://my.api.com --user api:mypassword --data-binary @/Users/myUsername/MyDirectoryName\\ \\(abc\\)/test/my/file.png --dump-header /dev/stdout", intern = T)

以下显示R不再对任何事情感到不满意,并正确打印了字符串:

cat("curl https://my.api.com --user api:mypassword --data-binary @/Users/myUsername/MyDirectoryName\\ \\(abc\\)/test/my/file.png --dump-header /dev/stdout")
# curl https://my.api.com --user api:mypassword --data-binary @/Users/myUsername/MyDirectoryName\ \(abc\)/test/my/file.png --dump-header /dev/stdout