【问题标题】:Passing a command with whitespace / special characters to R System Command将带有空格/特殊字符的命令传递给 R 系统命令
【发布时间】:2019-06-24 18:18:35
【问题描述】:

我可以在我的 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 的 system (docs) 中运行相同的命令时,如下所示:

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 的命令字符串?如果这是我认为的字符转义问题,我将如何执行转义?

谢谢

【问题讨论】:

  • 也许是@zx8754,但我是 R 新手,所以希望能更详细地了解您的意思。交易
  • 我认为你需要转义“转义字符”,或者转义“不是转义但在 R 中用作转义的字符”,希望这是有道理的。我将添加“正则表达式”标签,希望能吸引到更好的答案。
  • 很困惑,因为我可以这样做:system("open '/Users/myUsername/MyDirectoryName\ (abc)/test/my/file.png'")。

标签: r regex escaping


【解决方案1】:

正如@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

【讨论】:

  • @Benjamin,有帮助吗?
猜你喜欢
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多