(construct command by concatenating arguments)
Mit dem in die POSIX-Shell sh eingebauten Kommando eval können Sie der Shell sh die angegebenen Aufruf-Argumente als Kommando übergeben. Die Shell führt dieses Kommando aus.
Auf diese Weise werden die Aufruf-Argumente zweimal von der Shell bearbeitet:
das erste Mal, wenn die Shell die eval-Kommandozeile bearbeitet.
das zweite Mal, wenn die Shell die bearbeiteten Aufruf-Argumente als Kommando ausführt. Die Shell bearbeitet jede Kommando-Zeile vor der Ausführung.
Wann brauchen Sie eval?
Die Shell bearbeitet jede Kommando-Zeile in mehreren Schritten (siehe Abschnitt "Ausführung"). Bei jedem Bearbeitungsschritt interpretiert die Shell bestimmte Sonderzeichen. Die ursprüngliche Kommando-Zeile kann sich durch die Bearbeitungsschritte verändern.
Wenn die Shell beispielsweise eine Variable durch ihren Wert oder ein Kommando durch seine Ausgabe ersetzt, können in der Kommando-Zeile Sonderzeichen auftreten, die die Shell in den restlichen Bearbeitungsschritten nicht mehr interpretiert. Das eingebaute sh-Kommando eval sorgt dafür, dass die Shell verbliebene Sonderzeichen im zweiten Durchgang interpretiert (siehe Beispiele).
Syntax
eval [argument ...] |
beliebige Zeichenkette, die durch Leer- oder Tabulatorzeichen begrenzt wird. Das letzte Argument wird durch ein Kommando-Trennzeichen abgeschlossen. Sie können beliebig viele Argumente angeben, jeweils getrennt durch mindestens ein Leer- oder Tabulatorzeichen. Die Shell führt diese Argumente als Kommando aus. |
Internationale Umgebung
Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos eval: LANG Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden. LC_ALL Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen. LC_CTYPE Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) sowie die Einteilung der Zeichen in Groß- und Kleinbuchstaben und deren Übereinstimmung. LC_MESSAGES Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden. NLSPATH Legt den Pfad der Meldungsdateien für LC_MESSAGES fest. |
Beispiel 1
Die folgende Kommando-Zeile wird nur mit eval wie gewünscht ausgeführt:
Die Shell ersetzt die Variable kom durch ihren Wert. Nach der Variablen-Ersetzung erkennt die Shell den Strichpunkt ; nicht mehr als Kommando-Trennzeichen. Bei Aufruf mit eval interpretiert die Shell den Strichpunkt ; wie gewünscht, weil sie das Aufruf-Argument $kom zweimal bearbeitet. |
Beispiel 2
Die Shell-Prozedur evaltest soll zeigen, wie das Kommando eval von der Shell abgearbeitet set -x kennung=max for i in 1 2 3 4 do eval gruppe$i=$kennung$i eval echo \$gruppe$i done set -x bewirkt, dass die Shell, die die Shell-Prozedur ausführt, die bearbeiteten Kommandos vor der Ausführung auf die Standard-Fehlerausgabe schreibt. Wenn Sie diese Shell-Prozedur ausführen, erhalten Sie am Bildschirm folgende Ausgabe, allerdings ohne Zeilennummern:
Hier ist nur die Ausgabe nach dem ersten Schleifendurchlauf gezeigt. Zeile 2 zeigt die Bearbeitung der ersten eval-Kommandozeile: Zeile 3 zeigt die Ausführung der Zuweisung: Zeile 4 zeigt die Bearbeitung der zweiten eval-Kommandozeile: Zeile 5 zeigt die Bearbeitung des Kommandos echo: |
Siehe auch
set |