我正在尝试做一个程序的一部分,该程序将创建一个以当前日期为文件夹名的文件夹,最简单的方法似乎是使用字符串插值,但这不起作用,我不确定如何获取要使用的变量
require 'date'
puts "Start"
datuh = DateTime.now
puts datuh
pid1 = Kernel.spawn('mkdir -p "#{datuh}"')
Process.wait pid1
puts "Finished"
最终目标是使用当前日期创建一个文件夹,但现在创建一个名称为#{datuh}的文件夹
谢谢
答案 0 :(得分:2)
为避免引用问题,您可能希望使用另一种形式的spawn
:
pid = Kernel.spawn 'mkdir', '-p', datuh.to_s
但是,为什么要调出系统?
Dir.mkdir datuh.to_s
或者,合并-p
提供的“不要抛出错误”功能:
begin
Dir.mkdir datuh.to_s
rescue SystemCallError => e
raise e unless e.errno == Errno::EEXISTS::Errno
end
或者,
require 'fileutils'
FileUtils.mkdir_p datuh.to_s
答案 1 :(得分:0)
问题是您在字符串中使用单引号。单引号字符串不使用插值。这是可行的:
require 'date'
puts "Start"
datuh = DateTime.now
puts datuh
pid1 = Kernel.spawn("mkdir -p \"#{datuh}\"")
Process.wait pid1
puts "Finished"
此处有更多详细信息:https://ruby-for-beginners.rubymonstas.org/bonus/string_interpolation.html