gpt4 book ai didi

ruby - 如何正确解析不同数量的命令行参数

转载 作者:数据小太阳 更新时间:2023-10-29 07:09:17 27 4
gpt4 key购买 nike

n00b 问题警报!这是问题所在:我正在创建一个至少包含 3 个参数的 shell 脚本:一个字符串、一个行号和至少一个文件。

我已经编写了一个脚本,可以接受 EXACTLY 3 个参数,但我不知道如何处理多个文件名参数。

这是我的代码的相关部分(跳过写回文件等):

#!/usr/bin/env ruby

the_string = ARGV[0]
line_number = ARGV[1]
the_file = ARGV[2]

def insert_script(str, line_n, file)
f = file
s = str
ln = line_n.to_i

if (File.file? f)
read_in(f,ln,s)
else
puts "false"
end
end

def read_in(f,ln,s)
lines = File.readlines(f)
lines[ln] = s + "\n"
return lines
end

# run it
puts insert_script(the_string, line_number, the_file)

现在我知道编写一个遍历所有参数的 block 很容易:

ARGV.each do |a|
puts a
end

但我只需要循环遍历从 ARGV[2](第一个文件名)到最后一个文件名的参数。

我知道必须有 - 至少 - 至少一种简单的方法来做到这一点,但我现在看不出它是什么!

无论如何 - 如果有人能给我指出教程或示例,我会非常高兴,我相信那里有很多 - 但我似乎找不到它们。

谢谢

最佳答案

您会考虑使用有用的 gem 吗? Trollop非常适合命令行解析,因为它会自动为您提供帮助消息、长短命令行开关等。

require 'trollop'

opts = Trollop::options do
opt :string, "The string", :type => :string
opt :line, "line number", :type => :int
opt :file, "file(s)", :type => :strings
end

p opts

当我调用它“commandline.rb”并运行它时:

$ ruby commandline.rb --string "foo bar" --line 3 --file foo.txt bar.txt

{:string=>"foo bar", :line=>3, :file=>["foo.txt", "bar.txt"], :help=>false, :string_given=>true, :line_given=>true, :file_given=>true}

关于ruby - 如何正确解析不同数量的命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9106107/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com