在Bash中使用Rscript时如何正确转义双引号?
解决命令行R代码的引号转义问题
要解决这个问题,核心是处理bash命令行与R代码的引号嵌套和特殊字符转义:
问题根源
原命令中的"是HTML转义的双引号,在bash中无法被正确解析;同时bash会将`反引号视为命令替换符号,需要转义才能让R代码保留这个字符。
正确的转义写法
直接将HTML转义的"替换为bash可识别的转义双引号\",同时将R代码中的反引号转义为`(避免bash解析为命令替换),最终命令如下:
Rscript \ -e "biosketch_pkgs <- list('microtype', 'tabu', 'ulem', 'enumitem', 'titlesec')" \ -e "lapply(biosketch_pkgs, function (x) {tinytex::parse_install(text=paste('! LaTeX Error: File', paste0(\"`\", x, \"'.sty'\"), 'not found.'))})"
原理说明
- bash双引号内部的R代码双引号:需要用
\"转义,这样bash会将其作为普通字符传递给R,R解析后得到原有的双引号。 - bash中的反引号:R代码需要保留
作为字符串的一部分,而bash会默认将解析为命令替换,因此需要用\转义,确保这个字符被完整传递给R。
替代方案(更简洁)
如果改用单引号包裹bash的-e参数,可以避免双引号的转义(但R代码中的单引号需要特殊处理),写法如下:
Rscript \ -e 'biosketch_pkgs <- list("microtype", "tabu", "ulem", "enumitem", "titlesec")' \ -e 'lapply(biosketch_pkgs, function (x) {tinytex::parse_install(text=paste("! LaTeX Error: File", paste0("`", x, "'.sty'"), "not found."))})'
内容的提问来源于stack exchange,提问作者Noah_Seagull
相关产品推荐
相关产品推荐

