Hurtig guide til kommandolinjeargumenter i Ruby

Mange Rubin scripts har ingen tekst eller grafiske grænseflader. De løber simpelthen, gør deres job og afslutter derefter. For at kommunikere med disse scripts for at ændre deres adfærd skal kommandolinjeargumenter bruges.

Kommandolinjen er standard driftsform for UNIX-kommandoer, og da Ruby bruges vidt UNIX og UNIX-lignende systemer (som Linux og macOS), det er temmelig standard at støde på denne type program.

Sådan leveres kommandolinjeargumenter

Rubin script-argumenter overføres til Ruby-programmet af shell, det program, der accepterer kommandoer (såsom bash) på terminalen.

På kommandolinjen betragtes enhver tekst, der følger navnet på scriptet, som et kommandolinjeargument. Adskilt af mellemrum sendes hvert ord eller streng som et separat argument til Ruby-programmet.

Følgende eksempel viser den rigtige syntaks, der skal bruges til at starte test.rb Rubin script fra en kommandolinie med argumenterne test1 og test2.

$ ./test.rb test1 test2

Du kan støde på en situation, hvor du har brug for at videregive et argument til et Ruby-program, men der er et mellemrum i kommandoen. Det ser ud til at være umuligt i starten, da skallen adskiller argumenter om mellemrum, men der er en bestemmelse om dette.

instagram viewer

Eventuelle argumenter i dobbeltcitater adskilles ikke. De dobbelte citater fjernes af skallen, før de overføres til Ruby-programmet.

Følgende eksempel overfører et enkelt argument til test.rb Ruby script, test1 test2:

$ ./test.rb "test1 test2"

Sådan bruges kommandolinjeargumenter

I dine Ruby-programmer kan du få adgang til alle kommandolinjeargumenter, der er sendt af shell med argv speciel variabel. argv er en Array-variabel, der som strenge indeholder hvert argument, der er sendt af shell.

Dette program itererer over argvmatrix og udskriver dets indhold:

#! / usr / bin / env ruby. ARGV.each do | a | sætter "Argument: # {a}" ende

Følgende er et uddrag af en bash-session, der lancerer dette script (gemt som filen test.rb) med en række argumenter:

$ ./test.rb test1 test2 "tre fire" Argument: test1. Argument: test2. Argument: tre fire
instagram story viewer