我尝试在R中运行以下命令
system("Message=HelloWoRld;echo $(sed 's/R/r/' <(echo ${Message}))")
Run Code Online (Sandbox Code Playgroud)
但它失败了
Message=HelloWoRld
echo $(sed 's/R/r/' <(echo ${Message}))
Run Code Online (Sandbox Code Playgroud)
复制粘贴在终端时工作正常.这个问题似乎与此有关<(..).当我做任何一个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)\'')
Run Code Online (Sandbox Code Playgroud)
更重要的是,您当前的Bash命令非常复杂,并使用不必要的命令调用; 你可以通过更简单的方式实现同样的目标
sed s/R/r/ <<< $Message
Run Code Online (Sandbox Code Playgroud)
@chepner提出了另一个解决方案可以直接使用system而无需将执行传递给Bash的优点:
system("Message=HelloWoRld; echo $Message | sed 's/R/r/'")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |