Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

expr - Ausdrücke auswerten

&pagelevel(4)&pagelevel

(evaluate arguments as an expression)


expr interpretiert die in der Kommandozeile angegebenen Argumente als Ausdrücke und wertet sie nacheinander aus. Das Ergebnis der Auswertung wird auf die Standard-Ausgabe ausgegeben.
Mit expr können Sie z.B. ganzzahlige Berechnungen durchführen oder Zeichenketten miteinander vergleichen.


Syntax




expr ausdruck...

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 ein Trennzeichen voneinander getrennt. Als Trennzeichen wird der Wert der Variablen IFS verwendet. 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 Hochkommas ’...’ oder Anführungszeichen "..." einschließen, damit diese nicht als Trennzeichen interpretiert werden. Sonderzeichen der Shell müssen Sie in Hochkommas '...' oder Anführungszeichen "..." einschließen oder mit einem Gegenschrägstrich \ entwerten (siehe Abschnitt "POSIX-Shell-Variablen und Parameter-Ersetzung").

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 aufsteigendem Vorrang geordnet, Operatoren mit gleichem Vorrang sind in geschweiften Klammern {...} zusammengefasst.

Das Ergebnis 0 steht für den Wert 0, nicht für eine leere Zeichenkette.

Verknüpfung von Operatoren

op1|op2

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

op1&op2

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

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 Vergleichs 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 verglichen. 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 Argumente keine ganze Zahl ist, gibt expr eine Fehlermeldung aus (siehe Fehler).

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 Fehler).

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 Tabellen und Verzeichnisse, Reguläre Ausdrücke) angeben. Wenn op1 und op2 vom ersten Zeichen in jeder Zeichenkette bis zum letzten Zeichen in op2 übereinstimmen, wird normalerweise die Anzahl der übereinstimmenden Zeichen ausgegeben. Wenn Sie für op2 jedoch das Muster \(...\) verwenden, wird der Teil von op1 ausgegeben, der zu diesem Muster passt (siehe Beispiele 6 und 7).

(...)

Durch Setzen runder Klammern (...) können Sie die Auswertungsreihenfolge verändern. Die in runden Klammern zusammengefassten Ausdrücke werden zunächst ausgewertet, auch wenn der Vorrang der Operatoren etwas anderes aussagt.

Endestatus

0Ausdruck ist weder fehlerhaft noch leer noch 0
1Ausdruck ist leer oder 0
2Ausdruck ist fehlerhaft oder Division durch 0

Fehler

expr: Non-numeric argument

Bei den arithmetischen Operatoren +, –, *, /, % dürfen Sie nur ganzzahlige 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. Operanden 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 folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos expr:

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_COLLATE

Bestimmt in geklammerten regulären Ausdrücken die Bedeutung von Zeichenbereichen, Äquivalenzklassen und Zeicheneinheiten. LC_COLLATE 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.

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

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

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 Ausdruck angegeben wird. Das Zeichen Dach ^ ist ein Sonderzeichen und muss deshalb durch einen Gegenschrägstrich\ entwertet werden.

$ expr abc : [\^d-f]

1

Beispiel 7

In der Variablen a ist der absolute 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 absolute Pfadname oder der einfache Dateiname einer Datei abgelegt ist, erhalten Sie den einfachen Dateinamen auf folgende Weise:
$ expr $a : '.*/\(.*\)' \| $a