我尝试在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
。
答案 0 :(得分:8)
system
不是终端模拟器,它没有运行Bash。你的终端运行Bash。要使用system('bash -c \'echo $(date)\'')
获得相同的效果,请在Bash中运行命令。 E.g。
sed s/R/r/ <<< $Message
更重要的是,您当前的Bash命令非常错综复杂,并且使用了不必要的命令调用;你可以通过更简单的方式实现同样的目标
system
@chepner非常重视另一个解决方案可以直接在system("Message=HelloWoRld; echo $Message | sed 's/R/r/'")
中使用而无需将执行传递给Bash:
{{1}}