2016-04-22 108 views
0

我在Mac上使用RStudio。我想从R脚本文件中执行一个shell命令(终端命令)。我正在使用R中的系统函数来执行此操作。R中的mac shell命令带引号

但是,为了更进一步,我有一个shell命令,它有一个循环并传递一些参数。要传递这些参数,我需要使用引号。由于系统函数已经引用了引号,因此这些第二组引号会给出语法错误。例如

  1. 简单呼叫@终端:mkdir ch;当转换为R将是

    系统( “MKDIR CH”)

在RSCRIPT

使得在工作区中的CH文件夹。

  • 循环呼叫@终端=

    在* .pdf文件;做pdftotext“$ file”“$ file.txt”;完成。

  • 在终端中的上述命令将在所述目录中的每个文件环路“pdftotext”命令。但是,正如你注意到的,这个调用已经有引号(文件变量),并且与R中的系统(“”)函数的引用冲突R

    如何使用循环调用R系统函数来执行此shell命令?

    +2

    在你的系统调用周围使用单引号,即''',或用'\\'转义双引号。 – brittenb

    +0

    @brittenb请添加为答案。 – nrussell

    回答

    0

    问题是,一旦你包括第二个双引号,你告诉R关闭字符串。以此示例字符串为例:

    x = "I use air "quotes" like this..." 
    # Error: unexpected symbol in "x = "I use air "quotes" 
    

    它不喜欢嵌入的双引号。但是,如果我们替换单引号的双引号,我们的问题解决了:

    x = 'I use air "quotes" like this...' # or 
    x = "I use air 'quotes' like this..." 
    

    无论哪种方式,这两种类型的报价基本上互不理睬,一切都很好。但是,有时这还不够。如果您在嵌入式引号中嵌入了引号,该怎么办?

    x = "python some_syntax.py '["Me", "You", "Him"]'" 
    # Error: unexpected symbol in "x = "python some_syntax.py '["Me" 
    

    我们可以通过用反斜杠转义引号来解决这个问题。尽管如此,我将使用单引号和双引号来反转,以尽量减少所需的转义数。

    x = "python some_syntax.py \"['Me', 'You', 'Him']\"" 
    

    再次,一切都很好。

    希望有所帮助。

    +0

    谢谢。有用 :) – BKS