Много Рубин сценарии не имеют текста или графические интерфейсы. Они просто бегут, делают свою работу и затем выходят. Для взаимодействия с этими сценариями с целью изменения их поведения необходимо использовать аргументы командной строки.
Командная строка является стандартным режимом работы для команд UNIX, и поскольку Ruby широко используется в UNIX и UNIX-подобные системы (такие как Linux и macOS), довольно стандартно встречать этот тип программа.
Как предоставить аргументы командной строки
Аргументы сценария Ruby передаются программе Ruby оболочкой, программой, которая принимает команды (например, bash) на терминале.
В командной строке любой текст, следующий за именем скрипта, считается аргументом командной строки. Разделенные пробелами каждое слово или строка будут переданы в качестве отдельного аргумента в программу Ruby.
В следующем примере показан правильный синтаксис, используемый для запуска test.rb Ruby-скрипт из командной строки с аргументами test1 и test2.
$ ./test.rb test1 test2
Вы можете столкнуться с ситуацией, когда вам нужно передать аргумент в программу Ruby, но в команде есть пробел. Сначала это кажется невозможным, поскольку оболочка разделяет аргументы по пробелам, но для этого есть условие.
Любые аргументы в двойных кавычках не будут разделены. Двойные кавычки удаляются оболочкой перед передачей ее программе Ruby.
В следующем примере передается один аргумент test.rb Ruby скрипт, test1 test2:
$ ./test.rb "test1 test2"
Как использовать аргументы командной строки
В ваших программах на Ruby вы можете получить доступ к любым аргументам командной строки, передаваемым оболочкой с помощью ARGV специальная переменная. ARGV переменная Array, которая содержит в виде строк каждый аргумент, передаваемый оболочкой
Эта программа перебирает ARGVмассив и распечатывает его содержимое:
#! / usr / bin / env ruby. ARGV.each do | a | ставит "Аргумент: # {a}" конец
Ниже приведена выдержка из сеанса bash, запускающего этот скрипт (сохраняется как файл test.rb) с различными аргументами:
$ ./test.rb test1 test2 "три четверки" Аргумент: test1. Аргумент: test2. Аргумент: три четыре