使用$和ENV在Ruby中访问环境变量

3

我正在尝试访问在~/.bashrc中设置的环境变量。

在~/.bashrc中,我已经设置了:

export testdata = <some path>

当然不需要输入<>符号。我可以补充说明,我也尝试添加

标签。
testdata=<some path>

到 /etc/environment 文件

当我仍然在 Shell 中时,我可以执行以下命令:

echo $testdata

这将会得到一个结果 当我在我的脚本中执行以下操作

puts ENV['testdata']

这将会输出“目前为止一切顺利”。然而,我还有另一个不是由我编写的脚本,在其中有一行类似于:

if $testdata then
#some code
end

应该只在设定环境变量时执行代码,但是这段代码对我不起作用。只有当我使用 ENV[] 替换 $ 时,代码才能正确执行。


2
以$为前缀的变量在Ruby中不是环境变量,它们是全局变量。如果需要,可以使用$testdata = ENV['testdata'] - Aldehir
1个回答

3
这是预期行为。在Ruby中,$var是一个全局变量,而不是环境变量。如你所说,要访问环境变量,需要使用 ENV['var']

全局变量必须在同一脚本中设置,还是可能由外部脚本设置? - FlyingTeller
外部脚本是什么意思? - Alexey Shein
假设我上面描述的脚本是test.rb。如果我有一个名为do_test.rb的脚本调用test.rb,那么do_test.rb能否设置test.rb中使用的全局变量? - FlyingTeller
如果你的程序require了多个ruby文件,那么全局变量可能会在这些文件的任何位置被设置,并且当ruby解释器遇到它们时,它们将变得可用。 - Alexey Shein
当然可以。只需先定义变量,然后再引用你的test.rb文件。 - Alexey Shein
谢谢你的回答。我可能需要回到原作者那里,看看是否有我所缺少的东西。 - FlyingTeller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接