Linux / Unix Kommando: expr

Numm

expr - Evaluéieren engem Ausdrock

Synopsis

expr arg ? arg arg ... ?

Kkompatente arg 's (d'Separatoreplaze tëschent hinnen eropzelueden), beweist d'Resultat als Tcl-Ausdrock a gët de Wäert zréck. D'Operatoren, déi an Tcl-Ausdréck zegutt hunn, sinn e Subset vun den Operatoren, déi an C-Ausdréck zegutt hunn. Si hunn déi selwecht Bedeitung a Virgank wéi déi entspriechend C Operatoren. Ausdrécklech gi praktesch ëmmer numeresch Resultater (Integer oder Gitt-Point-Wäerter). Zum Beispill, den Ausdrock

expr 8.2 + 6

bis 14,2. Tcl-Ausdréck ënnerscheeden sech vun C-Ausdréck op d'Manéier déi Operanden sinn uginn. Och Tcl expressiounen ënnerstëtzen net numeresch Operatiounen a Stringvergläicher.

Operanden

Eng Tcl-Expression besteet aus enger Kombinatioun vun Operanden, Betreiber a Klammer. De wäisse Raum kann tëschent den Operanden an Operatoren a Klammern benotzt ginn; Et gëtt ignoréiert duerch d'Instruktioune vum Ausdrock. Wa méiglech, Operatioune ginn als Ganzt Wäerter interpretéiert. Ganz Integer Wäerter kënnen an Dezimal (normaler Fall) an octal (wann den éischten Zeeche vum Operand 0 ass ) oder hexadezimal (wann déi éischt zwou Zeeche vum Operand 0x sinn ) spezifizéiert ginn. Wann e Operand net eent vun den Integer-Formate geheescht huet, dann ass et als Gittpunkt benotzt ginn wann dat méiglech ass. D'Floating-Nummern kënnen an engem vun de Wee vun engem ANSI-kompatiblen C-Compiler genannt ginn (ausser datt d' F , F , L an L- Suffixen an de meeschte Installatiounen net zulässlech sinn). Zum Beispill, all déi folgend sinn d'gëlteg Floating-Nummern: 2.1, 3., 6e4, 7.91e + 16. Wann keng numeresch Interpretatioun méiglech ass, da gëtt e Operand wéi e String verlooss (an nëmmen eng begrenzte Serie vu Betreiber kann ugewandt ginn).

Operatiounen ginn an enger vun den folgenden Manéieren spezifizéiert:

[1]

Als numeresch Wäerter, entweder ganz oder Gleewpunkt.

[2]

Als Tcl Variabel, mat Standardnotéierung. De Wäert vum Verännerleche gëtt als Operand benotzt.

[3]

Als String an Doubletten ofgeschloss. Den ExpressionParser féiert Backslash, Variabel a Kommando ersetzen op d'Informatioun tëschent den Zitater, a benotzt de Resultat als Operand

[4]

Als String an den Hänn geschloen. D'Zeechen tëschent der oppener Haftung an der passender ener Haftung ginn als Operand ouni Ënnerscheeder benotzt.

[5]

Als Tcl-Kommando an enger Klammer. De Kommando gëtt ausgeführt a säi Resultat gëtt als Operand benotzt.

[6]

Als mathematesch Fonktioun déi hir Argumenter irgendwelse vun dësen Formen fir Operanden hunn, wéi d' Sënn ($ x) . Kuckt Iech hei fir eng Lëscht vu definéierte Funktiounen.

Wou d'Ersatzstoffer uewe sinn (z. B. bannent dernächst Ziteler), ginn se duerch d'Instruktioune vum Ausdrock gemaach. Allerdéngs kann eng extra Substrat vun der Substitutioun ofgeschnidden ginn vum Kommando-Parser, ier de Expressiounsprozesser genannt gouf. Wéi et diskutéiert ginn ass et normalerweis am beschten fir äussert Ausdréck an Klameren ëmzesetzen ze verhënneren, datt de Kommandant Parser d'Auswiesselunge vum Inhalt ze verhënneren.

Fir e puer Beispiller vu einfachen Ausdréck, ass d'Variabel a e de Wäert 3 an d'Variabel b huet de Wäert 6. Duerno gëtt de Kommando op der linker Säit vun all der Zeilenquelle de Wäert op der richteger Säit vun der Linn produzéiert:

Expr 3.1 + $ a6.1 expr 2 + "$ a. $ b" 5,6 expr 4 * [llength "6 2"] 8 expr {{word one} <"word $ a"} 0

Operatoren

D'gültege Betreiber ginn et hei ënnendrënner, gruppéiert an d'Ofbau vu Prioritéit gruppéiert:

- + ~!

Unary Minus, Unary plus, bit-wise NET, logesch NET. Keen vun dësen Operands kann op String-Operatiounen applizéiert ginn, a bitt-wise NICHT kann nëmme fir ganz Integer applizéiert ginn.

* /%

Multiplizéieren, trennen, de Rescht. Keen vun dësen Operands kann op String-Operatiounen applizéiert ginn, an de Rescht kann nëmme fir ganz Integer applizéiert ginn. De Rescht wäert ëmmer dee selwechte Schëld als Divisor hunn an e absoluten Wäert méi kleng wéi de Divisor.

+ -

Add a subtrahéieren. Gitt fir all numeresch Operatiounen.

<< >>

Links a riets Ännerung. Gitt fir ganz Integer. Eng richteger Zougang ass ëmmer de Zeechen.

<> <=> =

Boolesche manner, gréisser, manner wéi oder gläich, a méi wéi oder manner. Jidder Operateur produzéiert 1, wann d'Conditioun ass richteg, 0 anescht. Dës Operatoren kënnen op Strings an och numeresch Operatiounen applizéiert ginn, an deem Fall den Stringverglach benotzt.

==! =

Boolesche egal a net egal. Jidder Operateur produzéiert en Null / ee Resultat. Gitt fir all Operandentypen.

&

Bit-weis AND. Gitt fir ganz Integer.

^

Bit-weise exklusiv OR. Gitt fir ganz Integer.

|

Bit-weis ODER. Gitt fir ganz Integer.

&&

Logesch an. Produzéiert en 1 Resultat wann zwou Operatanten net Null sinn, 0 anescht. Gitt fir Boolschen a numeresch (ganz oder Gleefpunkt) hëllt nëmmen.

||

Logesch ODER. Produzéiert en 0 Resultat wann zwou Operanden Null sinn, 1 anescht. Gitt fir Boolschen a numeresch (ganz oder Gleefpunkt) hëllt nëmmen.

x ? y : z

Wann-dann -ech, wéi an C. Wann d' x net-Null ass, da gëtt de Resultat de Wäert vun y . Soss ass de Resultat de Wäert vun z . De x- Operne muss e numeresche Wäert hunn.

Kuckt de C Handbuch fir méi Detailer iwwer d'Resultater vun all Operator. All déi binär Operatiounen grupp op der selwechter Viraussiichtniveau. Zum Beispill, de Kommando

expr 4 * 2 <7

return 0.

De && , || an d'Operatoren hunn "lazy Evaluatioun", wéi och an C, wat heescht datt Operatoren net evaluéiert ginn, wann se net néideg sinn fir d'Resultat festzeleeën. Zum Beispill am Kommando

expr {$ v? [a]: [b]}

nëmmen ee vun [a] oder [b] gëtt tatsächlech ausgewert, jee no dem Wäert vun $ v . Bemierkung awer, datt dëst nëmmen richteg ass wann de ganzen Ausdrock an den Hänn geschloe gëtt; Anescht wéi, de Tcl-Parser préift zwou [a] a [b], ier Dir de expr- Kommando lancéiert.

Math Functions

Tcl ënnerstëtzt d'folgend mathematesch Funktiounen an Ausdrock:

Abonnéiert sëch Logbuch sqrt acos double log10 srand asin exp pow tan atan floor rand tanh atan2 fmod round ceil hypot sin cos int sinh

abs ( arg )

Gidd den absolute Wäert vun Arg . Arg kënnt entweder als Ganzt oder Gitt-Point sinn, a d'Resultat ass an der selwechter Form zréckkomm.

acos ( arg )

Gitt d'Baskesch Cosine vu Arg , am Beräich [0, Pi] Rader. Arg soll am Beräich [-1,1] sinn.

asin ( arg )

Gitt d'Bousekrank vu Arg , am Beräich [-pi / 2, pi / 2] Rader. Arg soll am Beräich [-1,1] sinn.

atan ( arg )

Gitt d'Bunn Tangent vun Arg , an der Band [-pi / 2, pi / 2] Rader.

atan2 ( x, y )

Gitt d'Arc Tangent vun y / x , an der Band [-pi, pi] Rader. x an y sinn net beide 0.

Plafong ( arg )

Gitt den klengsten Integer Wert net manner wéi arg .

cos ( arg )

Gitt d'Kosinus vum Arg , gemoossend bei Rader.

cosh ( arg )

Gitt d'hyperbolic Cosinus vum Arg . Wann d'Resultat e Iwwerstross verursaacht, gëtt e Fehler zréck.

duebel ( arg )

Wann Arg ee Schwemmswert ass, gëtt d' Arg zréck, andeems d' Arg agitt an d'Schwemm ëmgëtt an de konvertéiert Wäert zréck.

exp ( arg )

Gitt d'exponentiell vum Arg , gëtt als e ** arg definéiert . Wann d'Resultat e Iwwerstross verursaacht, gëtt e Fehler zréck.

Stack ( arg )

Gitt dee gréissten Integralwäert net méi staark als Arg .

fmod ( x, y )

Gitt d'Gedeessele Punkt vun der Divisioun vum x vun y . Wann y 0 ass, gëtt e Feeler zréck.

Hypot ( x, y )

Computéiert d'Längt vun der Hypotenuse vun engem rechteckegen Dräieck ( x * x + y * y ).

int ( arg )

Wann arg eng ganz Integer ass, gëtt d' Arg zréck, andeems d' Arg un ganz Integer duerch Truncatioun konvertéiert an zréckgezunn ass.

Log ( arg )

Gidd den nativen Logarithmus vum Arg . Arg muss positiv sinn.

log10 ( arg )

Gidd den Basis 10 Logarithmus vun Arg . Arg muss positiv sinn.

pow ( x, y )

Computéiert de Wäert vun der x op d'Muecht y erhéicht . Wann x negativ ass, musst e ganz Integer sinn.

rand ()

Gitt eng Gedeessele Punkt vun Null bis just manner wéi een oder mat mathematesche Begrëffer de Bereich [0,1]. De Samuitt ass vun der interner Nuetsstrooss vun der Maschinn oder kann manuell mat der srand Funktioun gesat ginn.

Ronn ( arg )

Wann Arg ee ganz Integer ass, gëtt d' Arg zréck, andeems d' Arg zu Integer konvertéiert ass duerch Ronnen an ass zréckgezunn.

Sënn ( arg )

Gitt de Sinus vun Arg , gemooss an Radians.

sinh ( arg )

Gitt d'hyperbolescht Sinus vun Arg . Wann d'Resultat e Iwwerstross verursaacht, gëtt e Fehler zréck.

sqrt ( arg )

Gitt d'Quadratwurzel vum Arg . Arg muss net negativ sinn.

srand ( arg )

De Arg , deen eng ganz Integer muss sinn, gëtt benotzt fir d'Saach fir den Zufallnummerengenerator zréckzesetzen. Gidd d'éischt Zufallnummer vun deem Saum. Jiddfer Interpreter huet säin eegent Saum.

tan ( arg )

Gitt d'Tangent vun Arg , gemoossend an Rader.

tanh ( arg )

Gitt d'Hyperbolitik Tangent vun Arg .

Niewent dësen vordefinéierten Funktiounen kënnen aner Applikatioune benotzt, déi mat Tcl_CreateMathFunc () definéieren.

Typen, Iwwerdréi a Präzision

All intern Rechenvirunale mat Integrieren sinn mat der C Typ laang gemaach an all intern Rechnunge mat Schwemmpunkt ginn mat dem C-Typ Duebel gemaach . Wann Dir e String zum Gutt-Point konvertéiert, gëtt de Exponent Iwwerfluss festgeholl a féiert zu enger Tcl Fehler. Fir Konvertéierung op Integer aus String, Detectioun vum Iwwerfluss hänkt vun dem Verhalen vu verschiddenen Routinen an der lokaler C-Bibliothéik ab, sou datt et als onbedenklech betracht gi wier. An all Fall, ganz Joer Iwwerleeën a Ënnerhalt, ginn normalerweis net verlässlech fir Zwëschergebnisse festgestallt. D'Floating-Point Iwwerfluss a Ënnerfläch ginn eréischt an de Grad vun der Hardware ënnerstëtzt, wat normalerweis zimlech sécher ass.

Konvertéierung tëschent intern intern Vertrieder fir Integer, Gittreflektéieren a String-Operatiounen gëtt automatesch gemaach wéi et néideg ass. Bei arithmetesche Berechnungen sinn ganzt Reegele benotzt ginn bis eng Gedeefpunkt Nummer gëtt agefouert, no hanner der Gittpunkt benotzt. Zum Beispill,

expr 5/4

return 1, während

expr 5 / 4.0 expr 5 / ([Stringlänge "abcd"] + 0.0)

zwou Réck 1,25. D'Floating-Punkt Wäerter sinn ëmmer mat engem `` zréckkomm . '' oder e e sou datt se net wéi ganz Joer wäert sinn. Zum Beispill,

expr 20.0 / 5.0

4,0 zeréckkënnt, net 4 .

String Operations

String-Wäerter kënnen als Operne vun de Vergleicher Operatoren benotzt ginn, obwuel den Expression-Evaluateur probéiert gëtt als Ganzt oder Gitt-Punkt ze maachen, wann et kann. Wann een vun de Operne vun engem Verglach e String ass an deen aneren e numeresche Wäert huet, gëtt de numeresche Operand zréckgezunn op e String mat dem C sprintf Formatbeschreiber % d fir Ganzt a % g fir Floatingpoint Wäerter. Zum Beispill, d'Commanden

Expr {"0x03"> "2"} expr {"0y" <"0x12"}

Déi zwee Retour erhalen 1. Den éischte Verglach ass mat Integer ze vergleichen, an d'zweet gëtt mam Stringverglach gemaach nodeems de zweeten Operand um String ëmgewandelt 18 . Wéinst der Tendenz Tendenz fir Wäerter als Zuelen wann et méiglech ze behandelen ass et net allgemeng eng gutt Iddi fir Betreiber wéi == wann Dir wëllt Stringverglach ze benotzen an d'Wäerter vun den Operanden kënnen arbiträr sinn; et ass besser an de Fäll, fir den String- Kommando ze benotzen.

Performance Konsideratiounen

Fëllt d'Ausdréck an den Hänn fir déi beschte Geschwindegkeet an déi klengst Späicherstand. Dëst erméiglecht de Tcl-Bytecode-Compiler déi bescht Code generéieren.

Wéi schonn erwähnt sinn d'Expressiounen zweemol ersat: eent vum Tcl-Parser an eemol vum Expr- Kommando. Zum Beispill, d'Commanden

Dir hutt eng 3 Set b {$ a + 2} expr $ b * 4

11, net e Vielfalt vu 4. Dëst ass well de Tcl-Parser als éischt $ a + 2 fir d'Variable b ersetzt , da gëtt de expr- Kommando den Ausdruck $ a + 2 * 4 .

Déi meeschten Ausdrock braucht keng zweet Ronn vun Ersatzstécker. Entweder se sinn an den Hänn geschloe ginn oder wann net, hunn hir Variabilitéiten an Kommandemolitioune Zuelen oder Zeechen déi net selwer Substitutiounen erfuerderlech erlaben. Well awer e puer ongefeierter Ausdrock brauch zwou Ronn vun Ersatzstécker, muss de Bytecode-Compiler weider Instruktioune ausginn fir dës Situatioun ze behandelen. Deen deierste Code ass néideg fir ongezwongene Ausdrock, déi Kommandosemécherungen enthalen. Dës Ausdréck mussen agefouert ginn andeems en neie Code generéiert gëtt wann d'Expression ausgezeechent gëtt.

Schlësselwieder

Arithmetik, Booleschen , Verglach, Ausdrock, Fuzzy Verglach

Wichteg: Benotzt de Mann Kommando ( % Mann ) fir ze kucken wéi e Kommando op Äre Computer benotzt.