Skip to main content

Alles über den Linux / Unix-Befehl: expr

REGEX Tutorial Reguläre Ausdrücke in Linux Ubuntu Mint Fedora SUSE [Deutsch/German] (Juni 2026)

REGEX Tutorial Reguläre Ausdrücke in Linux Ubuntu Mint Fedora SUSE [Deutsch/German] (Juni 2026)
Anonim

Name

Ausdruck - Bewerten Sie einen Ausdruck

Zusammenfassung

Ausdruck arg ? arg arg … ?

Verkettet arg 's (fügt Trennzeichen dazwischen hinzu), wertet das Ergebnis als Tcl-Ausdruck aus und gibt den Wert zurück. Die in Tcl-Ausdrücken zulässigen Operatoren sind eine Untermenge der in C-Ausdrücken zulässigen Operatoren. Sie haben dieselbe Bedeutung und Vorrang wie die entsprechenden C-Operatoren. Ausdrücke liefern fast immer numerische Ergebnisse (Ganzzahl- oder Gleitkommawerte). Zum Beispiel der Ausdruck

Ausdruck 8,2 + 6

ergibt 14.2. Tcl-Ausdrücke unterscheiden sich von C-Ausdrücken darin, dass Operanden angegeben werden. Tcl-Ausdrücke unterstützen auch nicht numerische Operanden und Zeichenkettenvergleiche.

Operanden

Ein Tcl-Ausdruck besteht aus einer Kombination von Operanden, Operatoren und Klammern. Zwischen den Operanden und Operatoren und Klammern kann Leerraum verwendet werden. es wird von den Anweisungen des Ausdrucks ignoriert. Operanden werden nach Möglichkeit als ganzzahlige Werte interpretiert. Integer-Werte können in Dezimalzahlen (dem Normalfall) und in Oktal angegeben werden (wenn das erste Zeichen des Operanden ist)0) oder in hexadezimaler Schreibweise (wenn die ersten beiden Zeichen des Operanden0x). Wenn ein Operand nicht über eines der oben angegebenen Integer-Formate verfügt, wird er, falls möglich, als Gleitkommazahl behandelt. Gleitkommazahlen können auf eine beliebige Weise angegeben werden, die von einem ANSI-kompatiblen C-Compiler akzeptiert wird (außer, dass derf, F, l, undL Suffixe sind in den meisten Installationen nicht zulässig. Beispielsweise sind alle der folgenden gültigen Gleitkommazahlen: 2.1, 3., 6e4, 7.91e + 16. Wenn keine numerische Interpretation möglich ist, wird ein Operand als Zeichenfolge belassen (und es kann nur eine begrenzte Anzahl von Operatoren darauf angewendet werden).

Operanden können auf eine der folgenden Arten angegeben werden:

1

Als numerischer Wert entweder Ganzzahl oder Fließkommazahl.

2

Als Tcl-Variable mit Standard$ Notation. Der Wert der Variablen wird als Operand verwendet.

3

Als Zeichenfolge in Anführungszeichen. Der Ausdrucksparser führt für die Informationen zwischen den Anführungszeichen einen umgekehrten Schrägstrich, eine Variable und einen Befehl aus und verwendet den resultierenden Wert als Operanden

4

Als String in Klammern eingeschlossen. Die Zeichen zwischen der offenen Klammer und der passenden schließenden Klammer werden ohne jegliche Ersetzung als Operand verwendet.

5

Als Tcl-Befehl in Klammern. Der Befehl wird ausgeführt und sein Ergebnis wird als Operand verwendet.

6

Als mathematische Funktion, deren Argumente eine der obigen Formen für Operanden haben, wie zSünde ($ x). Eine Liste der definierten Funktionen finden Sie unten.

Wo oben Substitutionen auftreten (z. B. in Anführungsstrichen), werden sie von den Anweisungen des Ausdrucks ausgeführt. Es wurde jedoch möglicherweise bereits eine zusätzliche Substitutionsschicht vom Befehlsparser ausgeführt, bevor der Ausdrucksprozessor aufgerufen wurde. Wie unten beschrieben, ist es normalerweise am besten, Ausdrücke in geschweifte Klammern zu setzen, um zu verhindern, dass der Befehlsparser Substitutionen für den Inhalt ausführt.

Für einige Beispiele für einfache Ausdrücke wird die Variable angenommenein hat den Wert 3 und die Variablebhat den Wert 6. Dann erzeugt der Befehl auf der linken Seite jeder Zeile darunter den Wert auf der rechten Seite der Zeile:

Ausdruck 3.1 + $ a6.1 Ausdruck 2 + "$ a. $ b" 5.6 Ausdruck 4 * Länge "6 2" 8 Ausdruck {{Wort Eins} <"Wort $ a"} 0

Betreiber

Die gültigen Operatoren sind unten in absteigender Rangfolge aufgeführt:

- + ~ !

Unäres Minus, Unäres Plus, bitweises NICHT, logisches NICHT. Keiner dieser Operanden darf auf String-Operanden angewendet werden, und bitweise darf NOT nur auf Ganzzahlen angewendet werden.

* / %

Multiplizieren, teilen, Rest. Keiner dieser Operanden darf auf Zeichenkettenoperanden angewendet werden, und restliche Werte können nur auf ganze Zahlen angewendet werden. Der Rest hat immer dasselbe Vorzeichen wie der Divisor und einen absoluten Wert, der kleiner als der Divisor ist.

+ -

Addiere und subtrahiere. Gültig für beliebige numerische Operanden.

<< >>

Links und rechts verschieben. Gilt nur für Ganzzahloperanden. Eine Rechtsverschiebung propagiert immer das Vorzeichenbit.

< > <= >=

Boolean kleiner, größer, kleiner oder gleich und größer als oder gleich. Jeder Operator produziert 1, wenn die Bedingung erfüllt ist, andernfalls 0. Diese Operatoren können sowohl auf Zeichenfolgen als auch auf numerische Operanden angewendet werden. In diesem Fall wird der Zeichenfolgenvergleich verwendet.

== !=

Boolean gleich und nicht gleich. Jeder Operator erzeugt ein Ergebnis von null / eins. Gültig für alle Operandentypen.

&

Bitweise UND. Gilt nur für Ganzzahloperanden.

^

Bitweises exklusives ODER. Gilt nur für Ganzzahloperanden.

|

Bitweise ODER. Gilt nur für Ganzzahloperanden.

&&

Logisches UND. Erzeugt ein Ergebnis 1, wenn beide Operanden ungleich Null sind, andernfalls 0. Gilt nur für boolesche und numerische Operanden (Ganzzahlen oder Gleitkommaoperatoren).

||

Logisches ODER. Erzeugt ein 0-Ergebnis, wenn beide Operanden Null sind, andernfalls 1. Gilt nur für boolesche und numerische Operanden (Ganzzahlen oder Gleitkommaoperatoren).

x ? y : z

Wenn-dann-sonst wie in C. Wenn x wertet ungleich Null aus, dann ist das Ergebnis der Wert von y . Andernfalls ist das Ergebnis der Wert von z . Das x Operand muss einen numerischen Wert haben.

Weitere Informationen zu den Ergebnissen der einzelnen Bediener finden Sie im Handbuch C. Alle binären Operatoren gruppieren sich von links nach rechts innerhalb derselben Prioritätsstufe. Zum Beispiel der Befehl

Ausdruck 4 * 2 <7

gibt 0 zurück.

Das&&, ||, und?: Operatoren haben eine "faule Auswertung", genau wie in C, was bedeutet, dass Operanden nicht ausgewertet werden, wenn sie nicht zur Ermittlung des Ergebnisses benötigt werden. Zum Beispiel im Befehl

Ausdruck {$ v? a: b}

nur einer vonein oderb wird tatsächlich ausgewertet, abhängig vom Wert von$ v. Beachten Sie jedoch, dass dies nur der Fall ist, wenn der gesamte Ausdruck in geschweifte Klammern eingeschlossen ist. Andernfalls wird der Tcl-Parser beide auswertenein undb vor dem Aufruf derAusdruck Befehl.

Mathematische Funktionen

Tcl unterstützt die folgenden mathematischen Funktionen in Ausdrücken:

Abs coshLogsqrt acos doppeltlog10srand wie in exppowbräunen eine Lohe FußbodenrandTanh atan2 fmodrunden ceiling HypotSünde cos intsinh

Abs( arg )

Gibt den absoluten Wert von zurück arg . Arg kann entweder eine Ganzzahl oder ein Gleitkommawert sein, und das Ergebnis wird in derselben Form zurückgegeben.

acos ( arg )

Gibt den Arcuskosinus von zurück arg im Bereich 0, pi Radiant. Arg sollte im Bereich -1,1 liegen.

wie in( arg )

Gibt den Arkussinus von zurück arg im Bereich -pi / 2, pi / 2 Radiant. Arg sollte im Bereich -1,1 liegen.

eine Lohe( arg )

Gibt den Arkustangens von zurück arg im Bereich -pi / 2, pi / 2 Radiant.

atan2 ( x, y )

Gibt den Arkustangens von zurück y / x im Bereich -pi, pi radians. x und y können nicht beide 0 sein.

ceiling ( arg )

Gibt den kleinsten ganzzahligen Wert nicht weniger als zurück arg .

cos ( arg )

Gibt den Cosinus von zurück arg , im Bogenmaß gemessen.

Cosh ( arg )

Gibt den hyperbolischen Cosinus von zurück arg . Wenn das Ergebnis einen Überlauf verursachen würde, wird ein Fehler zurückgegeben.

doppelt( arg )

Ob arg ist ein Floating-Wert, der zurückgegeben wird arg , sonst konvertiert arg auf Floating und gibt den konvertierten Wert zurück.

exp ( arg )

Gibt das Exponential von zurück arg , definiert als e ** arg . Wenn das Ergebnis einen Überlauf verursachen würde, wird ein Fehler zurückgegeben.

Fußboden( arg )

Gibt den größten Integralwert zurück, der nicht größer als ist arg .

fmod ( x, y )

Gibt den Gleitkomma-Rest der Division von zurück x durch y . Ob y 0 ist, wird ein Fehler zurückgegeben.

Hypot ( x, y )

Berechnet die Länge der Hypotenuse eines rechtwinkligen Dreiecks ( x * x + y * y ).

int ( arg )

Ob arg ist ein ganzzahliger Wert, wird zurückgegeben arg , sonst konvertiert arg in Integer durch Abschneiden und gibt den konvertierten Wert zurück.

Log( arg )

Gibt den natürlichen Logarithmus von zurück arg . Arg muss ein positiver Wert sein.

log10 ( arg )

Gibt den Logarithmus der Basis 10 von zurück arg . Arg muss ein positiver Wert sein.

pow ( x, y )

Berechnet den Wert von x zur Macht erhoben y . Ob x ist negativ, y muss ein ganzzahliger Wert sein.

rand ()

Gibt eine Fließkommazahl von Null bis knapp unter Eins zurück, oder in mathematischer Hinsicht den Bereich 0,1. Das Saatgut stammt von der internen Uhr der Maschine oder kann manuell mit der Srand-Funktion eingestellt werden.

runden( arg )

Ob arg ist ein ganzzahliger Wert, wird zurückgegeben arg , sonst konvertiert arg durch Runden auf Ganzzahl zurückgeben und den konvertierten Wert zurückgeben.

Sünde( arg )

Gibt den Sinus von zurück arg , im Bogenmaß gemessen.

sinh ( arg )

Gibt den hyperbolischen Sinus von zurück arg . Wenn das Ergebnis einen Überlauf verursachen würde, wird ein Fehler zurückgegeben.

sqrt ( arg )

Gibt die Quadratwurzel von zurück arg . Arg muss nicht negativ sein.

srand ( arg )

Das arg , die eine ganze Zahl sein muss, wird verwendet, um den Startwert für den Zufallsgenerator zurückzusetzen. Gibt die erste Zufallszahl aus diesem Samen zurück. Jeder Dolmetscher hat seinen eigenen Samen.

bräunen( arg )

Gibt den Tangens von zurück arg , im Bogenmaß gemessen.

tanh ( arg )

Gibt den hyperbolischen Tangens von zurück arg .

Zusätzlich zu diesen vordefinierten Funktionen können Anwendungen zusätzliche Funktionen definierenTcl_CreateMathFunc().

Typen, Überlauf und Präzision

Alle internen Berechnungen mit Ganzzahlen werden mit dem Typ C ausgeführt lange und alle internen Berechnungen, die Fließkommazahlen betreffen, werden mit dem Typ C ausgeführt doppelt . Beim Konvertieren eines Strings in Fließkomma wird ein Exponentenüberlauf erkannt, der zu einem Tcl-Fehler führt. Bei der Konvertierung in eine Ganzzahl von String hängt die Erkennung des Überlaufs vom Verhalten einiger Routinen in der lokalen C-Bibliothek ab. Daher sollte sie als unzuverlässig betrachtet werden. In jedem Fall werden Integer-Überlauf und Unterlauf für Zwischenergebnisse im Allgemeinen nicht zuverlässig erkannt. Gleitpunktüberlauf und -unterlauf werden in dem von der Hardware unterstützten Maß erkannt, was im Allgemeinen ziemlich zuverlässig ist.

Die Konvertierung zwischen internen Repräsentationen für Ganzzahl-, Gleitkomma- und Zeichenfolgenoperanden wird bei Bedarf automatisch durchgeführt. Für arithmetische Berechnungen werden Ganzzahlen verwendet, bis eine Gleitkommazahl eingeführt wird. Danach wird Gleitkommazahl verwendet. Zum Beispiel,

Ausdruck 5/4

gibt 1 zurück, während

Ausdruck 5 / 4,0 Ausdruck 5 / (Stringlänge "abcd" + 0.0)

beide geben 1,25 zurück. Gleitkommawerte werden immer mit einem `` zurückgegeben.'' oder eine damit sie nicht wie Ganzzahlen aussehen. Zum Beispiel,

Ausdruck 20,0 / 5,0

kehrt zurück4.0nicht4.

String-Operationen

Zeichenfolgewerte können als Operanden der Vergleichsoperatoren verwendet werden, obwohl der Ausdrucksauswerter versucht, Vergleiche als Ganzzahl oder Gleitpunkt auszuführen, wenn dies möglich ist. Wenn einer der Operanden eines Vergleichs eine Zeichenfolge ist und der andere einen numerischen Wert hat, wird der numerische Operand mit C zurück in eine Zeichenfolge konvertiert Sprintf Formatbezeichner% d für ganze Zahlen und%G für Gleitkommawerte. Zum Beispiel die Befehle

Ausdruck {"0x03"> "2"} Ausdruck {"0y" <"0x12"}

Beide geben 1 zurück. Der erste Vergleich wird mit einem Ganzzahlvergleich durchgeführt, und der zweite wird mit einem Zeichenfolgenvergleich durchgeführt, nachdem der zweite Operand in den String konvertiert wurde18. Aufgrund der Tendenz von Tcl, Werte möglichst als Zahlen zu behandeln, ist es im Allgemeinen nicht ratsam, Operatoren wie zu verwenden==wenn Sie wirklich einen Stringvergleich wünschen und die Werte der Operanden beliebig sein können; In diesen Fällen ist es besser, dieSchnur Befehl stattdessen.

Überlegungen zur Leistung

Schließen Sie Ausdrücke in geschweifte Klammern ein, um optimale Geschwindigkeit und geringste Speicheranforderungen zu erzielen. Dadurch kann der Tcl-Bytecode-Compiler den besten Code erzeugen.

Wie oben erwähnt, werden Ausdrücke zweimal ersetzt: einmal durch den Tcl-Parser und einmal durch den Ausdruck Befehl. Zum Beispiel die Befehle

Setze eine 3 setze b {$ a + 2} Ausdruck $ b * 4

return 11, kein Vielfaches von 4. Dies liegt daran, dass der Tcl-Parser zuerst ersetzt$ a + 2 für die Variableb, dann ist dieAusdruck Befehl wird den Ausdruck auswerten$ a + 2 * 4.

Die meisten Ausdrücke erfordern keine zweite Substitutionsrunde. Entweder sind sie in geschweifte Klammern eingeschlossen, oder falls nicht, ergeben ihre Variablen- und Befehlssubstitutionen Zahlen oder Strings, die selbst keine Substitutionen erfordern. Da einige unausgesprochene Ausdrücke jedoch zwei Erneuerungsrunden benötigen, muss der Bytecode-Compiler zusätzliche Anweisungen ausgeben, um mit dieser Situation umzugehen. Der teuerste Code ist für ungepflegte Ausdrücke erforderlich, die Befehlsersetzungen enthalten. Diese Ausdrücke müssen implementiert werden, indem bei jeder Ausführung des Ausdrucks neuer Code generiert wird.

Schlüsselwörter

Arithmetik, Boolean, Vergleich, Ausdruck, Fuzzy-Vergleich

Wichtig: Verwenden Sie die Mann Befehl ( % Mann ), um zu sehen, wie ein Befehl auf Ihrem Computer verwendet wird.