2011-08-24 60 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」)'工作,謝謝! –

相關問題