使用 optparse 时读取作为参数传递的文件

Reading a file that is passed as argument while using optparse

我正在编写一个需要参数才能成为 运行 的程序,其中一个可能的参数是通过传递程序 -f <file> 使用文件的选项。我不明白这是哪里出了问题,我试图将文件读取为 ARGV[1] 因为它是给程序的第二个参数。

然而,调用 ARGV[1] 没有任何输出,但是如果我在给定的标志和文件名之上再添加两个参数,然后调用 ARGV[1] 它将输出最后一个参数作为1?例如:

ruby testparse.rb -f test.txt
#<= Nothing there

但如果我这样做:

ruby testparse.rb -f test.txt test ttest
#<= ttest

那把 ARGV[1] 放在 ARGV[3] 的位置?所以我的问题是:

来源:

require 'optparse'

options = {}
OptionParser.new do |opt|
  opt.on('-f=FILE', '--file=FILE', 'File it') { |o| options[:file] = o }
end.parse!

if ARGV[1].nil?
  puts "Nothing there"
else
  puts ARGV[1]
end

当您调用 parse! 来解析您的命令行选项时,OptionParser 会从 ARGV 中删除它可以识别的任何内容,留下任何它无法识别的内容供您根据需要进行处理。

在你的例子中,因为你指定了 -f 选项来接受一个参数,所以这两个条目将从 ARGV 中删除。在您的代码中,您将选项存储在 options[:file] 中,因此请检查它而不是 ARGV[1].