2011-08-24 62 views
2

在R,当我运行为什么'system`不会创建并返回一个变量?

system("FOO='test123'") 

我希望

system("echo $FOO") 

,以同样的方式返回

test123 

system("echo $USER") 

回报我的用户名

但它什么也没有返回。为什么是这样?


为什么会有人想这样做吗?我试图模拟使用env FOO='test1234 R -vanilla < script.R,同时编写script.R,然后调用system("echo $FOO)`

+2

如果您想设置将保留您的R会话的环境变量,请使用'Sys.setenv'。 –

回答

3

我不知道R,但在其他语言中system()(至少在类Unix系统上)会创建一个新的shell(/ bin/sh)进程来执行该命令。您的FOO='test123'设置值为$FOO,但仅限于该过程。您的system("echo $FOO")在尚未设置$FOO的新过程中执行。

如果R有办法在内部设置环境变量(setenv,也许?),您应该使用它。

编辑:正如@Joshua在评论中说的那样,它是Sys.setenv

+0

哦,'FOO ='test123''不会创建一个环境变量,它只是创建一个shell变量(不会被子进程继承),除非您“导出”它。 –

6

每个系统调用都会触发一个带有自己的环境的NEW shell。在一个shell中设置的变量不会延续到后续的shell中 - 它们将彼此完全独立。

+0

'系统(“FOO ='test1234'; echo $ FOO”)'工作,谢谢! –

相关问题