Про ARGV в Ruby (Argument Vector)

В Ruby ARGV — це вбудований масив, який використовується для зберігання аргументів командного рядка, переданих при запуску скрипта. Його ім’я розшифровується як “Argument Vector”.

Нижче представлені основні моменти про ARGV, які варто знати.

1. Масив аргументів

ARGV містить усі аргументи, передані в командному рядку при запуску скрипта. Перший елемент цього масиву — це перший аргумент (без урахування імені самого скрипта, яке можна отримати через __FILE__).

Приклад:

# example_script.rb
puts "Arguments: #{ARGV.inspect}"

Запустимо скрипт:

ruby example_script.rb arg1 arg2 arg3

Результат:

Arguments: ["arg1", "arg2", "arg3"]

2. Тип даних

Усі елементи в ARGV представлені як строки (String), незалежно від того, який тип ви ввели в командному рядку.

Приклад:

# example_script.rb
puts ARGV.map(&:class)

Запуск:

ruby example_script.rb 42 true

Результат:

[String, String]

3. Доступ до елементів

Як і будь-який масив, ви можете звертатися до елементів ARGV за індексами:

puts ARGV[0] # перший аргумент
puts ARGV[1] # другий аргумент

4. Обробка аргументів

Оскільки всі аргументи представлені як строки, їх потрібно явно перетворювати до потрібного типу (наприклад, у число або булеве значення):

num = ARGV[0].to_i
puts num * 2

Запуск:

ruby example_script.rb 5

Результат:

10

5. Перевірка наявності аргументів

Щоб перевірити, чи були передані аргументи:

if ARGV.empty?
  puts "No arguments provided"
else
  puts "Arguments: #{ARGV.join(', ')}"
end

6. Зручна обробка з OptionParser

Ruby пропонує модуль OptionParser для складнішої обробки аргументів командного рядка, з можливістю задавати прапорці, значення за замовчуванням тощо.

Приклад з OptionParser:

require 'optparse'

options = {}
OptionParser.new do |opts|
  opts.banner = "Usage: example.rb [options]"

  opts.on("-nNAME", "--name=NAME", "Your name") do |name|
    options[:name] = name
  end

  opts.on("-aAGE", "--age=AGE", "Your age") do |age|
    options[:age] = age.to_i
  end
end.parse!

puts "Hello, #{options[:name]}! You are #{options[:age]} years old."

Запуск:

ruby example_script.rb -nJohn -a30

Результат:

Hello, John! You are 30 years old.

7. Особливості

  • Якщо скрипт запускається без аргументів, ARGV буде порожнім масивом ([]).
  • Ви можете модифікувати ARGV, видаляючи або додаючи елементи, як у звичайному масиві.

Видалення елементів:

ARGV.shift # видалить перший аргумент

Це базові принципи роботи з ARGV в Ruby. Для складнішої роботи можна комбінувати його з іншими інструментами або використовувати бібліотеки.