如何转义双引号以在命令行上运行此代码块?代码中有问题的部分是paste('! LaTeX Error: File', paste0("`", x, "'.sty'"), 'not found.'))
。
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.'))})"
我试图使用下面的来转义双引号,但它返回unexpected EOF while looking for matching
'`
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.'))})"
与其担心如何对特定字符串进行转义,不如考虑以一种完全不需要进行任何转义的方式对其进行处理。运行Rscript -
告诉Rscript读取要在stdin上运行的源代码,而<<'EOF'
则使所有内容直到下一行都只包含EOF
,并在stdin中提供。(您可以将字符EOF
替换为您选择的任何其他sigil,但重要的是要引用或转义此sigil,以指示shell不要以任何方式修改内容(。
Rscript - <<'EOF'
biosketch_pkgs <- list('microtype', 'tabu', 'ulem', 'enumitem', 'titlesec')
lapply(biosketch_pkgs, function (x) {
tinytex::parse_install(text=paste('! LaTeX Error: File',
paste0("`", x, "'.sty'"),
'not found.'))
})
EOF
如果确实有充分的理由使用Rscript -e
,那么正确的转义会在双引号字符串中的反斜杠、双引号或其他对shell有意义的语法之前放上反斜杠,如下所示:
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.'))})"