Befehlszeilenargumente in Ruby

Viele Ruby-Skripte haben keine Text- oder grafische Oberfläche. Sie rennen einfach, erledigen ihre Arbeit und gehen dann. Um mit diesen Skripten zu kommunizieren und ihr Verhalten zu ändern, müssen Befehlszeilenargumente verwendet werden.

Die Befehlszeile ist der Standard-Betriebsmodus für UNIX-Befehle, und da Ruby auf UNIX- und UNIX-ähnlichen Systemen (wie Linux und macOS) weit verbreitet ist, ist es ziemlich üblich, auf diese Art von Programm zu stoßen.

Bereitstellen von Befehlszeilenargumenten

Ruby-Skriptargumente werden von der Shell an das Ruby-Programm übergeben. Dabei handelt es sich um das Programm, das Befehle (z. B. bash) auf dem Terminal akzeptiert.

In der Befehlszeile wird jeder Text, der auf den Namen des Skripts folgt, als Befehlszeilenargument betrachtet. Durch Leerzeichen getrennt, wird jedes Wort oder jeder String als separates Argument an das Ruby-Programm übergeben. 

Das folgende Beispiel zeigt die richtige Syntax zum Starten von test.rb Ruby-Skript von einer Befehlszeile mit den Argumenten test1 und test2.

$ ./test.rb test1 test2

Es kann vorkommen, dass Sie ein Argument an ein Ruby-Programm übergeben müssen, der Befehl jedoch ein Leerzeichen enthält. Zunächst scheint es unmöglich, da die Shell Argumente zu Leerzeichen trennt, aber es gibt eine Vorkehrung dafür.

Argumente in doppelten Anführungszeichen werden nicht getrennt. Die doppelten Anführungszeichen werden von der Shell entfernt, bevor sie an das Ruby-Programm übergeben werden.

Das folgende Beispiel übergibt ein einzelnes Argument an das test.rb Ruby-Skript, test1 test2:

$ ./test.rb "test1 test2"

Verwendung von Befehlszeilenargumenten

In Ihren Ruby-Programmen können Sie auf alle Befehlszeilenargumente zugreifen, die von der Shell mit dem Befehl übergeben werden ARGV spezielle Variable. ARGV ist eine Array-Variable, die jedes von der Shell übergebene Argument als Zeichenfolge enthält.

Dieses Programm durchläuft die ARGV Array und druckt seinen Inhalt aus:

#! / usr / bin / env ruby ​​ARGV.each do | a | Setzt "Argument: # a"

Das Folgende ist ein Auszug aus einer Bash-Sitzung, in der dieses Skript gestartet wird (gespeichert als Datei) test.rb) mit einer Vielzahl von Argumenten:

$ ./test.rb test1 test2 "drei vier" Argument: test1 Argument: test2 Argument: drei vier