Linux / Unix kommando: ekspr

Namme

expr - Evaluearje in ekspresje

Synopsis

expr arg ? arg arg ... ?

Konkatenare arg 's (tafoegde separatorplakken tusken har), beoardielet it resultaat as Tcl-ekspresje, en jout de wearde werom. De operators dy't yn Tcl-útdrukken tastien binne in subset fan 'e operators dy't yn C útdrukken binne tawiisd en hawwe deselde betsjutting en prioriteit lykas de oerienkommende C-operators. Ekspresjes hawwe hast altyd numerike resultaten te krijen (integer of float-punten wearden). Bygelyks de ekspresje

expr 8.2 + 6

evaluearret nei 14.2. Tcl-útdrukken ferskille fan C-ekspresjes op 'e manier wêrop operanten opjûn binne. Ek Tcl-ekspresjes stipe net-numerike operanden en tekenferhalen.

Operanden

In Tcl-ekspresje bestiet út in kombinaasje fan operanten, operators en lieders. Wite romte kin brûkt wurde tusken de operannen en operators en klametten; It wurdt troch de ynstruksje fan 'e útdrukking negearre. Wannear mooglik is, wurde operanten ynterpretearre as inkelige wearden. Integerwearden kinne oanjûn wurde yn desimaal (it normale gefal), yn octaal (as it earste karakter fan 'e operand is 0 ), of yn hexadezimal (as de earste twa karakters fan' e operas binne 0x ). As in operant gjin ien fan 'e hiele formatyske formaten hat, dan wurdt it behannele as in floeiend puntnûmer as dat mooglik is. Floating-puntennûmers kinne oanjûn wurde yn ien fan 'e wizen dy't akseptearre wurde troch in ANSI-kompleetse C-kompilator (útsein dat de f , F , l , L- suffixes yn' e measte ynstallaasjes net tastien wurde). Bygelyks alle folgjende binne jildige floatpuntennûmers: 2.1, 3., 6e4, 7.91e + 16. As der gjin numerike ynterpretaasje is mooglik is, dan is in operant as in string ferlitten (en allinich in beheinde opset fan operators kin oanpast wurde).

Operanten kinne spesifisearre wurde op ien fan 'e folgjende wizen:

[1]

As numerike wearde, ynteger of float-puntsje.

[2]

As in fariant fan Tcl, brûke standert $ notaasje. De wearde fan 'e fariabele wurdt brûkt as opera.

[3]

As in string ynklik yn dûbel-quotes. De ekspresesse-parser sil efterblaze, fariabele, en kommando-substitúsjes útfiere op 'e ynformaasje tusken de quotes, en brûk de wearde werom as opera

[4]

As in string yn 'e paden omkeard. De karakteren tusken de iepen klompen en oerienkomme slute plaat wurde brûkt as opera sûnder ien fan substitúsjes.

[5]

As in kommando Tcl ynklokke. It kommando wurdt útfierd en har resultaat sil brûkt wurde as opera.

[6]

As in wiskundige funksje dy't har arguminten hat ien fan 'e boppeste foarmen foar operanten, lykas sin ($ x) . Sjoch hjirûnder foar in list mei define funksjes.

Wêr't subsydzjes hjirboppe foarkomme (bgl. Ynterne beoardielde snaren), wurde se útfierd troch de ynstruksje fan 'e útdrukking Hjirnei kin in ekstra skeakel fan subsydzje al dien wurde troch de kommando-parser foardat de ekspresjeprosesur neamd waard. As jo ​​hjirûnder besprutsen binne, is it meast it bêst om ekspresjes yn pylken om te hâlden om de kommando-parser te foarkommen fan it útfieren fan substitúsjes op de ynhâld.

Foar inkele foarbylden fan ienfâldige útdrukkingen sizze de fariabele a hat de wearde 3 en de fariabele b hat de wearde 6. Dan sil it kommando op 'e lofterkant fan elk fan' e linen liede de wearde oan 'e rjochterkant fan' e rigel:

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

Operators

De jildige operators binne hjirûnder neamd, groepearje yn ôfnimende regel fan prioriteit:

- + ~!

Unary minus, unary plus, bit-wise NOT, logysk NOT. Gjinien fan dizze operanden kin tapast wurde op stringoperanten, en bit-wiske NAME kin allinich foar inkele applikaasjes tapast wurde.

* /%

Multiplikje, divyzje, residinsje. Niet fan dizze operanden kin tapast wurde oan string-operanten, en de rest kin allinich oan inkele applikaasjes tapast wurde. De rest sil altyd itselde teken hawwe as de divisor en in absolute wearde lytser as de divisor.

+ -

Add en subtract. Valid foar alle numerike operanden.

<< >>

Lofts en rjochts skift. Valid foar allinich operanden allinich. In rjochtswiksel sil altyd it tekenblêd útwreidzje.

<> <=> =

Boolean minder, grutter, minder as of lyk is, en grutter as of lyk is. Elke operateur produkt 1 as de betingst is wier, 0 oars. Dizze operators kinne tapast wurde oan strings en numerike operanden, wêrby't string ferliking brûkt wurdt.

==! =

Boolean is lyk oan en net lyk. Elke operateur produkt in nul / ien resultaat. Valid foar alle operandtypen.

&

Bits-wiis en. Valid foar allinich operanden allinich.

^

Bit-wiis eksklusyf OR. Valid foar allinich operanden allinich.

|

Bit-wiis. Valid foar allinich operanden allinich.

&&

Logysk EN. Fertelt in 1 resultaat as beide operanten net-nul binne, 0 oars. Gelyk foar boolean en numerike (inteken of float-punten) allinne operearret.

||

Logyske OR. Fertelt in 0 resultaat as beide operanten nul binne, 1 oars. Gelyk foar boolean en numerike (inteken of float-punten) allinne operearret.

x ? y : z

As-dan-oars, lykas yn C. As x evaluearret foar net-nul, dan is it resultaat de wearde fan y . Oars, it resultaat is de wearde fan z . De x- operand moat in numerike wearde hawwe.

Sjoch it C-hânlieding foar mear details oer de resultaten fan elke operator. Alle binêre operaasjes groepearje nei-rjochts binnen itselde foargeande nivo. Bygelyks it kommando

expr 4 * 2 <7

jout 0 werom.

De && , || , en?: operators hawwe in 'lazy evaluation' ', krekt lykas yn C, dat betsjut dat operanten net evaluearre wurde as se net nedich binne om it resultaat te bepalen. Bygelyks yn 'e kommando

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

allinich ien fan [a] of [b] wurdt wier evaluearre, ôfhinklik fan de wearde fan $ v . Notysje lykwols dat dit allinich wier is as de folsleine ekspresje yn pylken befetsje is; oars sil de Tcl-parser beide [a] en [b] evaluearje foardat it ekspr- kommando opnien is .

Matte funksjes

Tcl stipet de folgjende wiskundige funksjes yn útdrukken:

Abs cosh log sqrt acos double log10 srand asin exp pow tan atan floor rand tanh atan2 fmod round ceil hypot sin cos int sinh

abs ( arg )

Gout de absolute wearde fan arg . Arg kin wêze as integer of float-puntsje, en it resultaat is werom yn deselde foarm.

acos ( arg )

Gout de bôge kosinus fan arg , yn it berik [0, pi] radians. Arg moat wêze yn it berik [-1,1].

asin ( arg )

Gout de bôge fan arg , yn it berik [-pi / 2, pi / 2] radians. Arg moat wêze yn it berik [-1,1].

atan ( arg )

Giet de bôge tangint fan arg , yn it berik [-pi / 2, pi / 2] radians.

atan2 ( x, y )

Jout de bôge-tangens werom fan y / x , yn it berik [-pi, pi] radians. x en y kinne beide net 0 wêze.

ceil ( arg )

Giet de lytste yntegerwearde net minder as arg .

cos ( arg )

Gout de kosinus fan arg , gemocht yn radies.

cosh ( arg )

Jout de hyperbolyske kosinus fan arg . As it resultaat in oerflak feroarsake, wurdt in flater weromjûn.

dûbel ( arg )

As arg in floeiber wearde is, jout arg , oars konvertearret arg foar float en jout de konverte wearde werom.

exp ( arg )

Gout it eksponentiell fan arg , definiearre as e ** arg . As it resultaat in oerflak feroarsake, wurdt in flater weromjûn.

flier ( arg )

Giet de grutste yntegrale wearde net grutter as arg .

fmod ( x, y )

Jout de float-puntenreste fan 'e divyzje fan x troch y . As y 0 is, wurdt in flater weromjûn.

hypot ( x, y )

Computes the length of the hypotenuse of a right-angled triangle ( x * x + y * y ).

int ( arg )

As arg in integer wearde is, jout arg , oars konvertearje arg oant ynteger troch trunkearring en jout de konverte wearde werom.

log ( arg )

Gout de natuerlike logaritme fan arg . Arg moat in positive wearde wêze.

log10 ( arg )

Jout de basis 10 logaritme fan arg . Arg moat in positive wearde wêze.

pow ( x, y )

Computes the value of x raised to the power y . As x negatyf is, moat in integerwearde wêze.

rand ()

Gout in flotend puntnûmer werom fan nul oant gewoan minder dan ien of yn mathematyske termen it berik [0,1]. De sied komt fan 'e ynterne klok fan' e masine of kin manuale ynsteld wurde mei de srandfunksje.

rûn ( arg )

As arg in inkel wearde is, jout arg , oars konvertearret arg oant ynteger troch rûning en jout de konverte wearde werom.

sin ( arg )

Giet de sinne fan arg , gemocht yn radies.

sinh ( arg )

Jout de hyperbolike sin fan arg . As it resultaat in oerflak feroarsake, wurdt in flater weromjûn.

sqrt ( arg )

Jout de fjouwerkant root fan arg . Arg moat net-negatyf wêze.

srand ( arg )

De arg , dy't in integer wêze moat, wurdt brûkt om it sied foar de willekeurige nûmer-generator werom te setten. Giet it earste random nûmer werom fan dat sied. Elk interpreter hat syn eigen sied.

tan ( arg )

Giet de tangens fan arg , gemocht yn radies.

tanh ( arg )

Jout de hyperbolyske tangens fan arg werom .

Neist dizze ferdielde funksjes kinne applikaasjes ekstra funksjes brûke mei Tcl_CreateMathFunc ().

Typen, oerflak, en precies

Alle ynteressive ynteresses mei intekening binne mei de C-type lang , en alle ynterne behearen dy't float-punten binne mei de C-type dûbele dien . By it konvertearjen fan in tekenrige nei flotearjend-punkt, wurdt eksponint-oerflop ûntdutsen en resultaat yn in Tcl-flater. Foar konversaasje nei integer fan tekenrige hinget ôf fan it gedrach fan guon routines yn 'e lokale C bibleteek, dus moat it as ûnrjochtlik beskôge wurde. Yn alle gefallen binne integer oerflak en ûnderstream yn 't algemien net betrouber fûn foar intermediate resultaten. Floating-point oerflak en ûnderflop wurde ûntdutsen nei de stipe dy't stipe wurdt troch de hardware, dy't normaal aardich betrouber is.

Ferkearing tusken ynterne fertsjintwurdigingen foar integer, float-punten, en string-operanten wurdt automatysk dien dien as nedich. Foar arithmetyske krediken wurde intekeners brûkt oant in oantal floatpunten nûmer ynfierd wurdt, wêrnei't floatpunt brûkt wurdt. Bygelyks,

expr 5/4

jout 1, wylst

expr 5 / 4.0 expr 5 / ([stringlange "abcd"] + 0.0)

beide returns 1.25. Floating-punten wearden wurde altyd mei in `` weromjûn . '' of in e, sadat se net as inkelwearden sjogge. Bygelyks,

expr 20.0 / 5.0

jout 4.0 , net 4 .

String Operations

String-wearden kinne brûkt wurde as operanten fan de fergelikingoperators, hoewol de ekspresje evaluator besiket fergelykjen te meitsjen as integer of float-puntsje as it kin. As ien fan 'e operanden fan in fergeliking in string is en de oare hat in numeryske wearde, wurdt de numerikaal operân werom nei in string omset mei de C- sprintf- formaat specifier % d foar inallen en % g foar floatpunten wearden. Bygelyks de kommando's

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

beide weromkommend 1. De earste fergeliking wurdt dien mei in ynteger fergelykjen, en de twadde wurdt dien troch it brûken fan stringferbettering nei't de twadde operand omset wurdt nei de snaar 18 . Omdat Tcl's tendens om wearden as sifers behannelje as it mooglik is, is it net algemien in goeie idee om operators te brûken lykas == as jo echt fergelike fergelykjen wolle en de wearden fan 'e operanden koartwille wêze; It is better yn dizze gefallen om it stjoerbehear yn plak te brûken.

Performance Considerations

Meitsje ekspresjes yn spoaren foar de bêste snelheid en de lytste opslach easken. Dit soarget de Tcl bytekodekompiler om de bêste koade te generearjen.

As hjirboppe neamd wurdt, wurde útdrukkingen twaris ferfongen: ien kear troch de Tcl-parser en ien kear troch it ekspr- kommando. Bygelyks de kommando's

Set in 3 set b {$ a + 2} ekspr $ b * 4

Werom 11, net in mannichfâld fan 4. Dit is om't de Tcl-parser earst $ a + 2 foar de fariabele b ferfynt , dan wurdt it ekspr- kommando de ekspresje $ a + 2 * 4 evaluearje.

De measte útdrukkings hawwe gjin twadde rûn fan subsydzjes. Of se wurde yn pylken ynskukt of, of net, har fariabele en kommando-substitúsjes sille nûmers of stringen ûntsteane dy't sels gjin substitúsjes nedich binne. Om't lykwols in pear ûnbidige útdrukkings twa rûnen fan substitúsjes nedich hawwe, moat de bytecodel kompiler ekstra ynstruksjes útjaan om dizze situaasje te behanneljen. De meast djoerste koade is ferplichte foar ûnbrutsen ekspresjes dy't befetsje fan substitútfetsjes. Dizze útdrukkingen moatte ynfierd wurde troch it generearjen fan nije koade elk kear de ekspresje útfierd wurdt.

Keywords

arithmetyk, boolean , fergelykje, ekspresje, fuzzy fergeliking

Wichtich: Brûk de manbehearder ( % man ) om te sjen hoe't in kommando brûkt wurdt op jo bepaalde komputer.