我尝试在 R 中运行以下命令
system("Message=HelloWoRld;echo $(sed 's/R/r/' <(echo ${Message}))")
但是它失败了,而
Message=HelloWoRld
echo $(sed 's/R/r/' <(echo ${Message}))
复制粘贴到终端时工作正常。该问题似乎与 <(..)
有关.当我做 which bash
或 system("which bash")
, 我得到 /bin/bash
.
为什么通过 system()
执行相同的命令或者直接在终端窗口上不会产生相同的输出?
仅供引用,我在 Mac OS X 10.11.3
. Bash 是 GNU bash, version 3.2.57(1)
R 是 R version 3.2.3
.
最佳答案
system
不是终端仿真器,也没有运行 Bash。您的终端运行 Bash。要使用 system
获得相同的效果,请在 Bash 中运行命令。例如
system('bash -c \'echo $(date)\'')
此外,您当前的 Bash 命令非常复杂,并且使用了不必要的命令调用;您可以通过更简单的方式实现相同的目的
sed s/R/r/ <<< $Message
@chepner 指出另一个解决方案可以直接在 system
中使用而无需将执行传递给 Bash:
system("Message=HelloWoRld; echo $Message | sed 's/R/r/'")
关于r - `Terminal` 与 R 中的 `system()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39150367/