當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R shQuote 在 OS Shell 中使用的引號字符串


R語言 shQuote 位於 base 包(package)。

說明

引用要傳遞給操作係統 shell 的字符串。

用法

shQuote(string, type = c("sh", "csh", "cmd", "cmd2"))

參數

string

字符向量,通常長度為 1。

type

字符:shell 引用的類型。支持部分匹配。 "cmd""cmd2" 指的是 Windows shell。 "cmd" 是 Windows 下的默認值。

細節

類 Unix 下支持的默認引用類型是 Bourne shell sh 。如果字符串不包含單引號,我們可以用單引號將其括起來。否則,字符串會被雙引號括起來,這會抑製除美元、反引號和反斜杠之外的元字符的所有特殊含義,因此這些(當然還有雙引號)前麵都有反斜杠。這種類型的引用也適用於 bashkshzsh

另一種類型的引用適用於C-shell(cshtcsh)。再一次,如果字符串不包含單引號,我們可以用單引號將其括起來。如果它確實包含單引號,我們可以使用雙引號,前提是它不包含美元或反引號(並且我們需要轉義反斜杠、感歎號和雙引號)。作為最後的手段,我們需要將字符串分割成不包含單引號的片段(有些可能是空的),並用單引號括住每個片段,並用雙引號括起單引號。

在 Windows 中,命令行解釋是由應用程序和 shell 完成的。它可能取決於所使用的編譯器:https://learn.microsoft.com/en-us/cpp/c-language/parsing-c-command-line-arguments?view=msvc-160 給出了 Microsoft 的 C 運行時規則。這可能取決於應用程序程序員的想法:檢查其文檔。 type = "cmd" 根據 Microsoft 的規則準備字符串作為參數進行解析,並使 shQuotesystemsystem2 一起使用時可以安全地用於許多應用程序。它用雙引號將字符串括起來,並用反斜杠轉義內部雙引號。任何尾隨反斜杠和最初位於雙引號之前的反斜杠都會加倍。

Windows cmd.exe shell(默認與 shell 一起使用)使用 type = "cmd2" 引用:特殊字符以 "^" 為前綴。在某些情況下,應使用兩種類型的引用:首先用於應用程序,然後使用 type = "cmd2" 引用 cmd.exe 。請參閱下麵的示例。

string 長度相同的字符向量。

例子

test <- "abc$def`gh`i\\j"
cat(shQuote(test), "\n")
## Not run: system(paste("echo", shQuote(test)))
test <- "don't do it!"
cat(shQuote(test), "\n")

tryit <- paste("use the", sQuote("-c"), "switch\nlike this")
cat(shQuote(tryit), "\n")
## Not run: system(paste("echo", shQuote(tryit)))
cat(shQuote(tryit, type = "csh"), "\n")

## Windows-only example, assuming cmd.exe:
perlcmd <- 'print "Hello World\\n";'
## Not run: 
shell(shQuote(paste("perl -e", 
                    shQuote(perlcmd, type = "cmd")),
              type = "cmd2"))

## End(Not run)

參考

Loukides, M. et al (2002) Unix Power Tools Third Edition. O'Reilly. Section 27.12.

Discussion in PR#16636.

也可以看看

base Quotes用於引用R代碼。

sQuote 用於引用英文文本。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Quote Strings for Use in OS Shells。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。