以编程方式设置环境变量

Posted

技术标签:

【中文标题】以编程方式设置环境变量【英文标题】:setting environment variables programmatically 【发布时间】:2012-09-14 00:41:24 【问题描述】:

在 R 中,我可以“手动”设置环境变量,例如:

Sys.setenv(TODAY = "Friday")

但是如果环境变量名和值存储在 R 对象中呢?

var.name  <- "TODAY"
var.value <- "Friday"

这是我写的:

expr <- paste("Sys.setenv(", var.name, " = '", var.value, "')", sep = "")
expr
# [1] "Sys.setenv(TODAY = 'Friday')"
eval(parse(text = expr))

确实有效:

Sys.getenv("TODAY")
# 1] "Friday"

但我觉得它很丑。有没有更好的办法?谢谢。

【问题讨论】:

【参考方案1】:

这是已接受答案的变体,但如果您想将其打包成一行,和/或避免生成中间 args 对象,您可以使用 setNames 获取命名字符向量,然后使用as.list 强制列出:

do.call(Sys.setenv, as.list(setNames(var.value, var.name)))

【讨论】:

【参考方案2】:

试试这个:

.Internal(Sys.setenv(var.name, var.value))

【讨论】:

+1 但不要在包中这样做,因为这违反了 CRAN 政策。 @JoshuaUlrich,您能否详细说明您的评论?是因为.Internal 函数不受相同(严格)向后兼容性要求的约束吗? @flodel:见CRAN Repository Policy:“CRAN 包应该只使用公共 API...”【参考方案3】:

您可以使用do.call 调用具有该命名参数的函数:

args = list(var.value)
names(args) = var.name
do.call(Sys.setenv, args)

【讨论】:

以上是关于以编程方式设置环境变量的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式为 .NET 5 Azure Function ServiceBusTrigger 连接字符串设置环境变量?

以编程方式删除环境变量

有没有办法在 Windows 上的 C++ 中以编程方式设置环境路径?

Shell编程Shell中Bash变量-环境变量

Shell编程Shell中Bash变量-环境变量

环境变量—《linux命令行与shell脚本编程大全》