Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ed(1)

sh(1)

expr(1)                                                             expr(1)

NAME
     expr - Ausdrücke auswerten (evaluate expression)

SYNTAX
     expr ausdruck ...

BESCHREIBUNG
     expr interpretiert die in der Kommandozeile angegebenen Argumente als
     Ausdrücke und wertet sie nacheinander aus. Das Ergebnis der Auswertung
     wird auf die Standardausgabe ausgegeben.

     Mit expr können Sie z. B. ganzzahlige Berechnungen im Bereich
     -9223372036854775808 bis 9223372036854775807 durchführen oder Zeichen-
     ketten miteinander vergleichen.

ARGUMENTE
     ausdruck
          ausdruck besteht entweder nur aus einem Operanden oder aus zwei
          Operanden, die mit einem Operator verknüpft sind. Als Operanden
          können Sie beliebige Zeichenketten angeben. Zeichenketten, die
          nur aus den Ziffern 0 bis 9 bestehen, interpretiert expr als
          ganze Zahlen. Durch ein vorangestelltes Minuszeichen - können Sie
          ganze Zahlen als negative Zahlen kennzeichnen.

          Operanden und Operatoren werden durch Leer- oder Tabulatorzeichen
          voneinander getrennt. Wenn Sie eine Zeichenkette als Operand
          angeben wollen, die Leer- oder Tabulatorzeichen enthält, müssen
          Sie deshalb entweder die ganze Zeichenkette oder die Leer- oder
          Tabulatorzeichen in Hochkommata '...' oder Anführungszeichen
          "..." einschließen, damit diese nicht als Trennzeichen interpre-
          tiert werden. Sonderzeichen der Shell müssen Sie in Hochkommata
          '...' oder Anführungszeichen "..." einschließen oder mit einem
          Gegenschrägstrich \ entwerten [siehe specialchar(5)].

          Wenn ausdruck nur aus einem Operanden besteht, ist das Ergebnis
          der Auswertung dieser Operand selber.

          Wie zwei Operanden miteinander verknüpft werden können, ist im
          folgenden beschrieben. Dabei sind die Operatoren nach aufsteigen-
          dem Vorrang geordnet, Operatoren mit gleichem Vorrang sind in
          geschweiften Klammern {...} zusammengefaßt.

          Das Ergebnis 0 steht für den Wert 0, nicht für eine leere Zei-
          chenkette.

          op1 | op2
               Wenn die Auswertung von op1 weder die leere Zeichenkette
               noch 0 liefert, ist das Ergebnis op1; sonst op2.

          op1 & op2
               Wenn weder die Auswertung von op1 noch die von op2 die leere
               Zeichenkette oder 0 liefert, ist das Ergebnis op1; sonst 0.



Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

expr(1)                                                             expr(1)

          op1 rel op2
               rel kann einer der folgenden Vergleichsoperatoren sein:

               <    kleiner als

               <=   kleiner als oder gleich

               =    gleich

               >=   größer als oder gleich

               >    größer als

               !=   ungleich

               Wenn die Bedingung erfüllt ist, ist das Ergebnis des Ver-
               gleichs 1. Wenn die Bedingung nicht erfüllt ist, ist das
               Ergebnis des Vergleichs 0. Wenn sowohl op1 als auch op2
               ganze Zahlen sind, werden sie numerisch miteinander vergli-
               chen. Ansonsten werden sie als Zeichenketten lexikalisch
               miteinander verglichen.

          op1 {+ -} op2
               Wenn op1 und op2 ganze Zahlen sind, ist das Ergebnis die
               Summe bzw. Differenz der beiden Zahlen. Wenn eines der Argu-
               mente keine ganze Zahl ist, gibt expr eine Fehlermeldung aus
               (siehe FEHLERMELDUNGEN).

          op1 {* / %} op2
               Wenn op1 und op2 ganze Zahlen sind, ist das Ergebnis das
               Ergebnis der angegebenen arithmetischen Operation:

               *    Multiplikation

               /    (ganzzahlige) Division

               %    Rest bei (ganzzahliger) Division

               Wenn eines der Argumente keine ganze Zahl ist, gibt expr
               eine Fehlermeldung aus (siehe FEHLERMELDUNGEN).

          op1 : op2
               Die Zeichenketten op1 und op2 werden miteinander verglichen,
               beginnend mit dem ersten Zeichen in jeder Zeichenkette und
               endend mit dem letzten Zeichen in op2. op2 können Sie in
               Form eines einfachen regulären Ausdrucks [siehe
               expressions(5)] angeben. Wenn op1 und op2 vom ersten Zeichen
               in jeder Zeichenkette bis zum letzten Zeichen in op2 übe-
               reinstimmen, wird normalerweise die Anzahl der übereinstim-
               menden Zeichen ausgegeben. Wenn Sie für op2 jedoch das
               Muster \(...\) verwenden, wird der Teil von op1 ausgegeben,
               der zu diesem Muster paßt (siehe Beispiele 7 und 8).


Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

expr(1)                                                             expr(1)

          match op1 op2
               Gleiche Bedeutung wie op1 : op2.

          (...)
               Durch Setzen runder Klammern (...) können Sie die Auswer-
               tungsreihenfolge verändern. Die in runden Klammern zusammen-
               gefaßten Ausdrücke werden zunächst ausgewertet, auch wenn
               der Vorrang der Operatoren etwas anderes aussagt.

ENDESTATUS
     0    Ausdruck ist nicht fehlerhaft und die Auswertung liefert weder 0
          noch die leere Zeichenkette.

     1    Die Auswertung des Ausdrucks liefert entweder 0 oder die leere
          Zeichenkette.

     2    Ausdruck ist fehlerhaft oder Division durch 0

     >2   Fehler

FEHLERMELDUNGEN

     expr: non-numeric argument

     Bei den arithmetischen Operatoren +, -, *, /, % dürfen Sie nur ganz-
     zahlige Operanden angeben.

     expr: division by zero

     Sie haben durch 0 dividiert.

     expr: syntax error

     Sie haben einen Syntaxfehler beim Aufruf von expr gemacht, z. B. Ope-
     randen und Operatoren nicht durch Leer- oder Tabulatorzeichen
     getrennt.

     expr: RE error

     Sie haben beim Mustervergleichsoperator : den zweiten Operanden nicht
     in korrekter Form als einfachen regulären Ausdruck angegeben.

INTERNATIONALE UMGEBUNG
     Die Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
     texte.









Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

expr(1)                                                             expr(1)

     In geklammerten regulären Ausdrücken bestimmt die Umgebungsvariable
     LCCOLLATE die Bedeutung von Zeichenbereichen, Äquivalenzklassen und
     Zeicheneinheiten, die Umgebungsvariable LCCTYPE die Bedeutung von
     Zeichenklassen. LCCOLLATE bestimmt zudem das Verhalten von
     Vergleichsoperatoren beim Vergleich von Zeichenketten. Wenn z. B. die
     Buchstaben a und ä in einer Äquivalenzklasse sind, ergibt der Ausdruck

     expr $var:[[=a=]]

     den Wert 1, wenn der Wert der Variablen a oder ä ist.

     Wenn LCMESSAGES, LCCOLLATE oder LCCTYPE nicht oder als leere Zei-
     chenkette definiert ist, wird der Wert von LANG als Standardwert für
     die jeweils nicht gesetzte oder leere Variable herangezogen. Ist auch
     LANG nicht oder als leere Zeichenkette definiert, verhält sich das
     System so, als wäre es nicht internationalisiert.

     Hat eine der Variablen für die internationale Umgebung einen ungülti-
     gen Wert, verhält sich das System so, als wäre keine Variable
     gesetzt.Die Umgebungsvariable LCALL bestimmt die gesamte internatio-
     nale Umgebung. LCALL hat Vorrang vor allen anderen Umgebungsvariablen
     im Bereich der Internationalisierung.

BEISPIELE
     Beispiel 1

     Einfache Rechnung:

     $ expr 21 + 9 '*' 2 / 6
     24

     Beispiel 2

     Im folgenden Beispiel wird zu der Variablen a der Wert 1 addiert.

     $ echo $a
     3
     $ a=`expr $a + 1`
     $ echo $a
     4

     Beispiel 3

     Im folgenden Beispiel werden zwei Umgebungsvariablen verglichen.

     $ echo $op1 $op2
     text1 text2
     $ expr $op1 = $op2
     0





Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

expr(1)                                                             expr(1)

     Problematisch wird der Vergleich, wenn der Wert einer Variablen einen
     Operator für expr darstellt. Das Problem kann durch Verbindung der
     Variablen mit einem unproblematischen Zeichen gelöst werden.

     $ echo $op1 $op2
     = =
     $ expr $op1 = $op2
     expr: syntax error
     $ expr X$op1 = X$op2
     1

     Beispiel 4

     Ausgabe der Anzahl der Zeichen in VAR:

     $ echo $VAR
     Hallo
     $ expr $VAR : '.*'
     5

     Beispiel 5

     Vergleich zweier Zeichenketten:

     $ expr mausoleum : maus
     4

     Beispiel 6

     Vergleich zweier Zeichenketten, wobei das Muster als regulärer Aus-
     druck angegeben wird. Das Zeichen Dach ^ ist ein Sonderzeichen für die
     Shell und muß deshalb durch einen Gegenschrägstrich \ entwertet wer-
     den.

     $ expr abc : [\^d-f]
     1

     Beispiel 7

     In der Variablen a ist der Pfadname einer Datei abgelegt, etwa
     /usr/anna/parnassum/infinitum. Um den einfachen Dateinamen, also
     infinitum, auszugeben, geben Sie ein:

     $ expr $a : '.*/\(.*\)'
     infinitum

     Beispiel 8

     Wenn in der Variablen a entweder der Pfadname oder der einfache Datei-
     name einer Datei abgelegt ist, erhalten Sie den einfachen Dateinamen
     auf folgende Weise:



Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

expr(1)                                                             expr(1)

     $ expr $a : '.*/\(.*\)' \| $a

HINWEISE
     Etliche der Operatoren sind zugleich Kontrolloperatoren der Shell, so
     daß sie in der Kommandozeile maskiert werden müssen.

     Jeder Ausdruck ist aus einzelnen Argumenten zusammengesetzt, die daher
     durch Leerzeichen getrennt sein müssen.

     Beispiele:
     __________________________________________
    |     Ungültig    |         Gültig        |
    |_________________|_______________________|
    | expr 1+2        |  expr 1 + 2           |
    | expr "1 + 2"    |  expr 1 + 2           |
    | expr 1 + (2 * 3)|  expr 1 + \( 2 \* 3 \)|
    |_________________|_______________________|

SIEHE AUCH
     ed(1), sh(1).


































Seite 6                      Reliant UNIX 5.44               Gedruckt 11/98

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