eval(1) eval(1)
NAME
eval - Aufruf-Argumente bearbeiten und als Kommando ausführen (eva-
luate)
SYNTAX
eval argument ...
BESCHREIBUNG
Mit dem in die Shell sh(1) bzw. ksh(1) eingebauten Kommando eval kön-
nen Sie der Shell die angegebenen Aufruf-Argumente als Kommando über-
geben. 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 Kommandozeile vor
der Ausführung.
Wann brauchen Sie eval?
Die Shell bearbeitet jede Kommandozeile in mehreren Schritten [siehe
sh(1), WIE BEARBEITET DIE SHELL DIE KOMMANDOZEILE?]. Bei jedem Bear-
beitungsschritt interpretiert die Shell bestimmte Sonderzeichen. Die
ursprüngliche Kommandozeile 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 Kommandozeile Son-
derzeichen auftreten, die die Shell in den restlichen Bearbeitungs-
schritten nicht mehr interpretiert. Das eingebaute Shell-Kommando eval
sorgt dafür, daß die Shell verbliebene Sonderzeichen im zweiten Durch-
gang interpretiert (siehe BEISPIELE).
ARGUMENTE
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.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
eval(1) eval(1)
INTERNATIONALE UMGEBUNG
Die Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
texte. Wenn LCMESSAGES nicht oder als leere Zeichenkette definiert
ist, wird der Wert von LANG als Standardwert herangezogen. Ist auch
LANG nicht oder als leere Zeichenkette definiert, verhält sich das
System so, als wäre es nicht internationalisiert.
BEISPIELE
Beispiel 1
Die folgende Kommandozeile wird nur mit eval wie gewünscht ausgeführt:
$ kom='date;who'
$ $kom
date;who: not found
$ eval $kom
Thu Mar 09 15:46:02 MET 1989
udo tty004 Mar 9 09:20
Die Shell ersetzt die Variable kom durch ihren Wert. Nach der Variab-
len-Ersetzung erkennt die Shell den Strichpunkt ; nicht mehr als Kom-
mando-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 wird. Sie hat folgenden Inhalt:
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, daß die Shell, die die Shell-Prozedur ausführt, die
bearbeiteten Kommandos vor der Ausführung auf die Standardfehleraus-
gabe schreibt.
Wenn Sie diese Shell-Prozedur ausführen, erhalten Sie am Bildschirm
folgende Ausgabe, allerdings ohne Zeilennummern:
$ sh evaltest
1 kennung=max
2 + eval gruppe1=max1
3 gruppe1=max1
4 + eval echo $gruppe1
5 + echo max1
6 max1
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
eval(1) eval(1)
.
.
.
Hier ist nur die Ausgabe nach dem ersten Schleifendurchlauf gezeigt.
Zeile 2 zeigt die Bearbeitung der ersten eval-Kommandozeile:
Die Shell hat $i durch den Wert 1 und $kennung durch den Wert max
ersetzt. Der Aufruf mit eval ist nötig, weil die Shell im ersten
Durchgang das Gleichheitszeichen nicht als Zeichen für Zuweisung
erkennt. Die Shell führt eine Zuweisung nur aus, wenn der Variablen-
Name, also die Zeichenkette vor dem Gleichheitszeichen = mit einem
Buchstaben oder Unterstrich _ beginnt und nur Buchstaben, Ziffern und
Unterstriche enthält. gruppe$i ist wegen des Dollarzeichens $ kein
erlaubter Variablen-Name.
Zeile 3 zeigt die Ausführung der Zuweisung:
Bei der zweiten Bearbeitung der Aufruf-Argumente interpretiert die
Shell das Gleichheitszeichen wie gewünscht, weil das Argument vor =
ein erlaubter Name für eine Shell-Variable ist.
Zeile 4 zeigt die Bearbeitung der zweiten eval-Kommandozeile:
Die Shell hat den Stellungsparameter $i durch den Wert 1 ersetzt und
das Entwertungszeichen \ vor $ entfernt. Hier ist eval nötig, damit
die Shell die Variable gruppe1 durch ihren Wert ersetzt.
Zeile 5 zeigt die Bearbeitung des Kommandos echo. Hier hat die Shell
$gruppe1 durch den Wert max1 ersetzt. Zeile 6 enthält die Ausgabe des
Kommandos echo.
HINWEISE
Bei der Verwendung von eval können sich Abweichungen im Verhalten
ergeben, je nachdem, welche Shell benutzt wird. Die möglichen Abwei-
chungen sind nicht eigens beschrieben.
SIEHE AUCH
ksh(1), set(1), sh(1).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98