我很难将环境变量添加到具有特殊字符的REnviron文件中。这是在Debian机器上,文件位于/usr/lib/R/etc/Renviron。如果我的值有一个&,那么在安装软件包时会出现一个奇怪的错误(尽管这个包安装得很好):
REnviron文件:TEST_KEY=HEY&X&THERE
命令:install.packages(futures)
错误:
/usr/lib/R/bin/Rcmd: 468: /usr/lib/R/etc/Renviron: THERE: not found
/usr/lib/R/bin/Rcmd: 468: /usr/lib/R/etc/Renviron: X: not found这似乎是因为&是一个特殊的角色。我可以通过在以下值周围加上引号来解决这个问题:TEST_KEY="HEY&X&THERE"。但是,在那个时候,我不知道当一个值本身有一个"时,如何处理。例如,如果我希望这个值是HEY&"&THERE,我不知道如何格式化它(引号前面的反作用力没有起作用)。我尝试了"HEY&\"&THERE",但是这使得字符串中的\一旦加载到R中,这就引出了我更广泛的问题:
如何确保满足linux环境变量样式规则的任何内容都能在REnviron文件中工作?
更新:这似乎是Debian的一个特定问题。您可以使用debian:bullseye-slim停靠映像重新创建它,安装R,然后编辑Renviron以在其中包含一个&。
发布于 2022-01-19 16:42:44
好吧,我花了一个小时来研究这个问题,我认为答案就在这里。
在Ubuntu和Debian (可能还有其他系统)中,Renviron文件都在bash中执行。所以,您在文件中输入的正是bash命令。您可以在RCmd的第39-40行中看到以下命令:
. "${R_HOME}/etc${R_ARCH}/Renviron"
export `sed 's/^ *#.*//; s/^\([^=]*\)=.*/\1/' "${R_HOME}/etc${R_ARCH}/Renviron"`第一行在shell中运行Renviron文件,然后根据其中包含=的行导出变量名。
因此,在我们的例子中,处理这个问题的方法是在所有值周围加上双引号,而字符串中的任何双引号都应该在它之前得到一个\。在发布这个问题之前,我没有意识到这个解决方案,原因是我在R中打印我的文本时没有使用cat(),这就移除了前面的\。所以:"HEY&\"&THERE"是正确的方法。
概述:
\一起转义实际的双引号)。https://stackoverflow.com/questions/70772634
复制相似问题