ruby 在文件路径中使用环境变量

bweufnob  于 2023-04-05  发布在  Ruby
关注(0)|答案(4)|浏览(105)

我想在下面的代码中使用输入path

File.exists?(File.expand_path(path))

我可以在path中使用环境变量吗?语法应该是什么?

zsbz8rwp

zsbz8rwp1#

您可以使用标准的Ruby字符串插值(尽管有点罗嗦)

path = "log/#{ENV['RAILS_ENV']}.log" # or whatever
# >> "log/development.log"
mzaanser

mzaanser2#

要扩展环境变量,您应该自己执行:

def expand_env(str)
  str.gsub(/\$([a-zA-Z_][a-zA-Z0-9_]*)|\${\g<1>}|%\g<1>%/) { ENV[$1] }
end

expand_env("${SHELL}:%USER%:$PAGER")
# => "/bin/bash:amadan:less"

(both支持Windows风格和Unix风格,但只支持基本的替换,而不是bash所能做的任何疯狂的事情)。

6rvt4ljy

6rvt4ljy3#

对于可移植性,最好使用File::joinENV哈希:

File.exists?( File.join(ENV['MY_VAR'],'bin') )
dzhpxtsq

dzhpxtsq4#

Rubocop建议对@Amadan的答案进行以下改进:

def expand_env(str)
  str.gsub(/\$([a-zA-Z_][a-zA-Z0-9_]*)|\${\g<1>}|%\g<1>%/) do 
    ENV.fetch(Regexp.last_match(1), nil) 
  end
end

相关问题