Linux / Unix Command: expr

Nimi

expr - hinnake väljendit

Kokkuvõte

expr arg ? arg arg ... ?

Concatenates arg 's (lisades eraldaja ruumi nende vahel), hindab tulemust Tcl avaldisena ja tagastab väärtuse. Tcl-avaldistena lubatud operaatorid on C-väljundites lubatud operaatorite alamhulk ning nende tähendus ja ülimuslikkus on vastavate C-operaatoritega. Väljendid annavad peaaegu alati numbrilised tulemused (täisarvud või ujukoma väärtused). Näiteks väljend

expr 8.2 +6

hindab 14,2. Tcl-avaldised erinevad C-väljenditest nii, nagu on määratletud operandidega. Samuti toetavad Tcl-väljad mittereditsioonilisi ooperende ja stringiväliseid võrdlusi.

Ooperid

Tcl-ekspress koosneb operandidest, operaatoritest ja sulgudest. Ooperiteede ja operaatorite ning sulgudes võib kasutada valget tühikut; seda ignoreerivad väljendi juhised. Võimaluse korral tõlgendatakse ooperende kui täisarvulisi väärtusi. Täisarvulised väärtused võivad olla määratud kümnendkohani (normaalne), kaheksandas (kui operandi esimene täht on 0 ) või kuueteistkümnendsüsteemis (kui operandi kaks esimest tähemärki on 0x ). Kui operandil pole ülal toodud täisarvude vormingut, siis loetakse seda kui ujukinnangu numbrit, kui see on võimalik. Ujukomplektide arv võib olla määratletud mis tahes viisil, mis on vastu võetud ANSI-ühilduva C kompilaatori poolt (välja arvatud see, et sufiksid f , F , L ja L ei ole enamikul rajatistes lubatud). Näiteks kõik järgmised omadused kehtivad ujukoma numbrid: 2.1, 3., 6e4, 7.91e + 16. Kui numbrilist tõlgendust ei ole võimalik, siis jäetakse operand vasakule stringina (ja sellele võib lisada ainult piiratud operaatorite arvu).

Operande saab määrata mis tahes järgmisel viisil:

[1]

Numbriväärtusena on kas täisarv või ujuva punkt.

[2]

Tcl muutujaga, kasutades standardset $ märgistust. Operandi väärtusena kasutatakse muutuja väärtust.

[3]

Nagu string kahekordse hinnapakkumisi. Väljendparser täidab tsitaatide vahel oleva teabe vahel tagaklahvlasuhet, muutuja ja käsu asendusi ning kasutage saadud väärtust kui operandit

[4]

Nööbis oleva stringina. Avatud traksidega ja vastavate lähedaste traksidega märgid kasutatakse operandina ilma asendusteta.

[5]

Sulgudes on lisatud Tcl käsk. Käsk käivitatakse ja selle tulemust kasutatakse operandina.

[6]

Matemaatilise funktsioonina, mille argumentideks on mõni ülalolevatest vormidest operandide jaoks, näiteks sin ($ x) . Vaadake allpool määratletud funktsioonide nimekirja.

Kui asendused esinevad eespool (nt sisestatud kommenteeritud stringid), siis need täidavad väljendi juhised. Kuid enne ekspressiooniprotsessori kutsumiseks võib käsu parser juba teha täiendava asenduskihi. Nagu allpool arutletakse, on parimal juhul kõige paremini lisada väljendeid traksidega, et vältida käsu parserilt sisu asendamist.

Mõne näitena lihtsatest väljunditest eeldage, et muutuja a väärtus on 3 ja muutuja b väärtuseks on 6. Seejärel annab iga järgneva liini vasakpoolse käsu väärtus rea paremal küljel:

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

Ettevõtjad

Kehtivad operaatorid on loetletud allpool, rühmitatuna järjestuses järjestuses:

- + ~!

Unary minus, unary plus, natuke mitte, loogiline EI. Ükski neist alamandmistest ei saa rakendada stringioperandalledele ja bitiseadet NOT võib kohaldada ainult täisarvude suhtes.

* /%

Korrutage, jagage, ülejäänud. Ükski neist alamandmetest ei saa rakendada stringide ooperendeid, ja ülejäänu võib rakendada ainult täisarvude suhtes. Ülejäänud on alati sama tähis nagu jagaja ja absoluutväärtus väiksem kui jagaja.

+ -

Lisage ja lahutage. Kehtib numbriliste operandide jaoks.

<< >>

Vasak ja parem muutus. Kehtib ainult täisarvulistele ooperitele. Pareminihe vahetab alati märkibti.

<> <=> =

Boolean vähem, suurem, väiksem või võrdne ning suurem või võrdne. Iga käitaja toodab 1, kui tingimus on tõene, 0 muul juhul. Neid operaatoreid võib rakendada nii stringidele kui ka numbrilistele operandidele, mille puhul kasutatakse stringivõrdlust.

==! =

Boolean on võrdne ja mitte võrdne. Iga operaator annab null / ühe tulemuse. Kehtib kõigi operandi tüübid.

&

Bit-tark JA. Kehtib ainult täisarvulistele ooperitele.

^

Bit-eksklusiivne VÕI. Kehtib ainult täisarvulistele ooperitele.

|

Bituarvuline VÕI. Kehtib ainult täisarvulistele ooperitele.

&&

Loogiline JA. Toodab 1 tulemust, kui mõlemad ooperid ei ole null, 0 muul juhul. Kehtib ainult booleanist ja numbrilisest (täisarvu või ujuva punkti) ooperitega.

||

Loogiline VÕI Toodab 0 tulemust, kui mõlemad operande nullid, 1 muul juhul. Kehtib ainult booleanist ja numbrilisest (täisarvu või ujuva punkti) ooperitega.

x y : z

Kui-siis-else, nagu punktis C. Kui x hindab mitte-nulli, siis on tulemuseks y väärtus. Vastasel juhul on tulemuseks z väärtus. X- operandil peab olema numbriline väärtus.

Üksikasjalikum teave kõigi operaatorite tulemuste kohta leiate C juhendist. Kõik binaarserverite rühmad vasakule paremale sama prioriteedi tasemel. Näiteks käsk

expr 4 * 2 <7

tagastab 0

&& , || , ja ?: operaatoritel on "laisk hindamine", nagu ka C-s, mis tähendab, et operandeid ei hinnata, kui neid tulemuste määramiseks ei vajata. Näiteks käskluses

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

sõltuvalt väärtusest $ v, hinnatakse tegelikult ainult [a] või [b] väärtust. Pange tähele siiski, et see kehtib ainult siis, kui kogu väljend on piiritletud; vastasel korral hindab Tcl parser nii [a] kui ka [b] enne expr käsku käivitamist .

Matemaatika funktsioonid

Tcl toetab järgmisi matemaatilisi funktsioone väljendeid:

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

abs ( arg )

Tagastab arg argumendi absoluutse väärtuse. Arg võib olla kas täisarv või ujuva punkt, ja tulemus on tagastatud samas vormis.

acos ( arg )

Tagastab Arg arginaarsuse , vahemikus [0, pi] radiaani. Arg peaks olema vahemikus [-1,1].

asin ( arg )

Tagastab ARG-i arginaine vahemikus [-pi / 2, pi / 2] radiaani. Arg peaks olema vahemikus [-1,1].

atan ( arg )

Tagastab argi argumenteeritud tangensi vahemikus [-pi / 2, pi / 2] radiaani.

atan2 ( x, y )

Tagastab y / x kaar-tangensi vahemikus [-pi, pi] radiaani. x ja y ei saa olla mõlemad 0.

Ceil ( arg )

Tagastab väikseima täisarvu väärtuse mitte vähem kui arg .

cos ( arg )

Tagastab argi koosinus, mõõdetuna radiaanides.

cosh ( arg )

Tagastab Arg hüperboolse kooseina . Kui tulemus põhjustab üleliigne, tagastatakse viga.

topelt ( arg )

Kui arg on ujuva väärtusega, tagastab arg , muidu konverteerib argi ujuvuseks ja tagastab konverteeritud väärtuse.

exp ( arg )

Tagastab ekspressioon arg , defineeritud kui e ** arg . Kui tulemus põhjustab üleliigne, tagastatakse viga.

korrus ( arg )

Tagastab suurima integraalse väärtuse, mis pole suurem kui arg .

fmod ( x, y )

Tagastab x jagamise ujuvjääkjooni y-ga . Kui y on 0, tagastatakse viga.

hüpoteetiline ( x, y )

Arvutatakse parempoolse kolmnurga hüpotenuuse pikkus ( x * x + y * y ).

int ( arg )

Kui arg on täisarv, tagastab arg , teisendab arg väärtus täisarvuks kärpimise teel ja tagastab konverteeritud väärtuse.

log ( arg )

Tagastab arg argumendi naturaallogaritmi. Arg peab olema positiivne väärtus.

log10 ( arg )

Tagastab alus argumendi logaritm 10. Arg peab olema positiivne väärtus.

pow ( x, y )

Arvutab võimsuse y tõusnud väärtuse x . Kui x on negatiivne, peab y olema täisarvuline väärtus.

rand ()

Tagastab ujukoma arvu alates nullist kuni vähem kui ühe või matemaatiliselt vahemik [0,1]. Seemned pärinevad masina sisemisest kellaajast või võivad olla käsitsi seatud funktsiooni abil.

ümmargune ( arg )

Kui arg on täisarv väärtus, tagastab arg , teisendab arg väärtusena täisarvuni ümardades ja tagastab konverteeritud väärtuse.

sin ( arg )

Tagastab argi sinise, mõõdetuna radiaanides.

sinh ( arg )

Tagastab hüperboolse sinise arg . Kui tulemus põhjustab üleliigne, tagastatakse viga.

sqrt ( arg )

Tagastab arg argvriksi ruutjuure. Arg peab olema mitte-negatiivne.

srand ( arg )

Pöördu , mis peab olema täisarv, kasutatakse pistikprogrammide genereerimiseks seemne lähtestamiseks. Tagastab selle seemne esimese juhu numbri. Igal tõltil on oma seeme.

tan ( arg )

Tagastab argi puutuja, mõõdetuna radiaanides.

tanh ( arg )

Tagastab hüperboolse argumendi puutuja.

Lisaks neile eelnevalt määratletud funktsioonidele võivad rakendused määrata täiendavaid funktsioone, kasutades Tcl_CreateMathFunc ().

Tüübid, ülevoolu ja täpsus

Kõik sisemised arvutused, mis hõlmavad täisarvu, on tehtud C-tüüpi pikkusega ja kõik sisendarvutused, mis sisaldavad ujukomöödet, tehakse C-tüüpi kahekohaliseks . Kui stringi teisendatakse ujuvaks punktiks, tuvastatakse eksponendi ülevool ja tekib Tcl-viga. Ümbervoolu tuvastamiseks stringi täisarvuks muutmisel sõltub mõnede tavade käitumine kohalikus C-raamatukogus, seega tuleks seda pidada ebausaldusväärseks. Igal juhul ei loeta vahetulemuste korral usaldusväärselt täisarvulist ülevoolu ja alakoormust. Ujuva punkti ülevoolu ja allvoolu tuvastatakse riistvara poolt toetatavale tasemele, mis on üldiselt päris kindel.

Täisarvude, ujukomplektide ja stringivormingute sisestandmete ümberarvestamine toimub automaatselt vastavalt vajadusele. Aritmeetiliste arvutuste korral kasutatakse täisarvu kuni mõne ujukomplekti numbri sisestamiseni, mille järel kasutatakse ujukpunkti. Näiteks,

expr 5/4

tagastab 1, samal ajal

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

mõlemad tagastavad 1,25. Ujukoma väärtused tagastatakse alati koos `` . '' või e nii, et nad ei näeks välja täisarvulisi väärtusi. Näiteks,

expr 20.0 / 5.0

tagastab 4,0 , mitte 4 .

String operatsioonid

Stringiväärtusi võib kasutada võrdlusoperaatorite operandina, ehkki ekspressi hindaja üritab võrdlusi teha kui täisarvu või ujukoma, kui see saab. Kui üks võrdlusperandidest on string ja teine ​​on numbriline väärtus, teisendatakse numbriline operand tagasi stringi, kasutades täisarvude jaoks C sprintf- vormingu spetsifikatsiooni % d ja ujukoma väärtuste jaoks % g . Näiteks käske

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

mõlemad tagastavad 1. Esimene võrdlus tehakse täieliku võrdluse abil ja teine ​​tehakse kasutades stringivõrdlust pärast seda, kui teine ​​operand on teisendatav stringi 18 . Tcl-i kalduvuse tõttu hinnata väärtusi arvudes, kui see on võimalik, ei ole üldiselt hea mõte kasutada operaatoreid nagu ==, kui sa tõesti soovid stringivõrdlust ja operandide väärtused võivad olla meelevaldsed; nendel juhtudel on parem kasutada stringi käsu.

Töövõime kaalutlused

Lisage traksidega väljendid parima kiiruse ja väikseimate salvestusnõuete jaoks. See võimaldab Tcl bytecode'i kompileerijal luua parima koodi.

Nagu eespool mainitud, asendatakse väljendeid kaks korda: üks kord Tcl parseri abil ja üks kord expr käsuga. Näiteks käske

seadke 3 komplekt b {$ a + 2} expr $ b * 4

tagasipöördumine 11, mitte kordne 4. See tuleneb sellest, et Tcl parser asendatakse algselt muutuja b väärtusega $ a + 2 , siis expr käsk hindab väljendit $ a + 2 * 4 .

Enamik väljendeid ei vaja teist asenduste vooru. Kas nad on kinnitatud traksidega või kui mitte, siis nende muutujate ja käskude asendused annavad numbreid või stringe, mis ise ei vaja asendusi. Kuid kuna mõni mittespetsiifiline väljendus vajab kahte asendusringi, peab baiti koodide kompileerija andma täiendavaid juhiseid selle olukorra käsitlemiseks. Kõige kallim kood on vajalik käskude asendusteta käivitamata väljenditele. Need väljendid tuleb rakendada, genereerides uue koodi iga kord, kui väljend on teostatud.

Märksõnad

aritmeetika, boolean , võrdlema, väljendus, fuzzy võrdlus

Tähtis: kasutage käsuga man ( % man ), et näha, kuidas käsku kasutatakse teie konkreetsel arvutis.