Kommandoradsargument i Ruby

Många Ruby-skript har inga text eller grafiska gränssnitt. De springer helt enkelt, gör sitt jobb och lämnar sedan. För att kommunicera med dessa skript för att ändra sitt beteende måste kommandoradsargument användas.

Kommandoraden är standardläget för UNIX-kommandon, och eftersom Ruby används allmänt på UNIX och UNIX-liknande system (som Linux och macOS) är det ganska standard att stöta på den här typen av program.

Hur man tillhandahåller kommandoradsargument

Ruby-skriptargument överförs till Ruby-programmet av skalet, det program som accepterar kommandon (t.ex. bash) på terminalen.

På kommandoraden betraktas all text som följer skriptets namn som ett kommandoradsargument. Separat med mellanslag kommer varje ord eller sträng att skickas som ett separat argument till Ruby-programmet. 

Följande exempel visar rätt syntax som ska användas för att starta test.rb Rubinskript från en kommandorad med argumenten test1 och test2.

$ ./test.rb test1 test2

Du kan stöta på en situation där du behöver överföra ett argument till ett Ruby-program men det finns ett utrymme i kommandot. Det verkar omöjligt från början, eftersom skalet skiljer argument på mellanslag, men det finns en bestämmelse för detta.

Alla argument i dubbla citat kommer inte att separeras. De dubbla citaten tas bort av skalet innan de överförs till Ruby-programmet.

Följande exempel överför ett enda argument till test.rb Ruby manus, test1 test2:

$ ./test.rb "test1 test2"

Hur man använder kommandoradsargument

I dina Ruby-program kan du komma åt alla kommandoradsargument som skickas av skalet med argv specialvariabel. argv är en Array-variabel som innehåller som strängar varje argument som passeras av skalet.

Detta program upprepas över argv matris och skriver ut dess innehåll:

#! / usr / bin / env ruby ​​ARGV.each do | a | sätter "Argument: # a" slut

Följande är ett utdrag från en bash-session där skriptet startas (sparas som filen test.rb) med olika argument:

$ ./test.rb test1 test2 "tre fyra" Argument: test1 Argument: test2 Argument: tre fyra