Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ksh(1)

set(1)

sh(1)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026