Kõik Linuxi/Unixi käsu kohta: ekspr

The avald utiliit Linux shell ühendab argumendid ja hindab seejärel tulemuse Tcl-avaldisena, tagastades väärtuse standardväljundisse.

Tcl-avaldistes lubatud operaatorid on C-avaldistes lubatud operaatorite alamhulk ning neil on sama tähendus ja prioriteet, mis vastavatel C-operaatoritel. Väljendid peaaegu alati anda numbrilisi tulemusi (täisarv või ujukoma väärtused).

mees kirjutab klaviatuuril
dm909/Moment/Getty Images

Sisukokkuvõte

Käsk võtab järgmise üldkuju:

avald arg1 arg2 ...

Operandid

Tcl-avaldis koosneb operandide, operaatorite ja sulgude kombinatsioonist. Operandide ja operaatorite ning sulgude vahel võib kasutada tühikuid; väljendi juhised ignoreerivad seda.

Võimaluse korral tõlgendatakse operandid täisarvudena. Täisarvu väärtused võib määrata kümnendkohana (tavaline juhtum), kaheksandsüsteemis (kui operandi esimene märk on 0) või kuueteistkümnendsüsteemis (kui operandi kaks esimest märki on 0x). Kui operandil ei ole ühtegi ülaltoodud täisarvu vormingut, käsitletakse seda võimaluse korral ujukomaarvuna.

Ujukomanumbreid võib määrata mis tahes viisil, mis on aktsepteeritud ANSI-ga ühilduva C-kompilaatori poolt (välja arvatud f, F, l, ja L järelliited pole enamikus installatsioonides lubatud). Näiteks kõik järgmised on kehtivad ujukomaarvud: 2.1, 3., 6e4, 7,91e+16. Kui numbriline tõlgendus pole võimalik, jäetakse operandi stringiks ja sellele võib rakendada ainult piiratud hulga operaatoreid.

Operandid saab määrata ühel järgmistest viisidest:

  • Arvväärtusena, kas täisarv või ujukoma.
  • Tcl muutujana, kasutades standardset $ märge. Operandina kasutatakse muutuja väärtust.
  • Stringina, mis on ümbritsetud kahekordsete jutumärkidega. Avaldise parser asendab jutumärkide vahelise teabe kaldkriipsu, muutuja ja käsu asendusi ning kasutab saadud väärtust operandina.
  • Traksidega suletud nöörina. Operandina kasutatakse ilma asendusteta märke avatud ja sobiva sulgesulu vahel.
  • Tcl-käsuna, mis on sulgudes. Käsk täidetakse ja selle tulemust kasutatakse operandina.
  • Matemaatilise funktsioonina, mille argumentidel on mõni ülaltoodud operandide vorm, näiteks patt($x).

Kui asendused esinevad ülal (nt tsiteeritud stringides), teostatakse need avaldise juhiste järgi. Kuid käsuparser võib olla juba enne avaldiseprotsessori väljakutsumist sooritanud täiendava asenduskihi.

Mõne lihtsa avaldise näite puhul oletame, et muutuja a on väärtus 3 ja muutuja on väärtus 6. Seejärel loob iga alloleva rea ​​vasakul küljel olev käsk väärtuse rea paremal küljel:

avaldis 3,1 + a6,1 $
avaldis 2 + "$a.$b"5.6
avaldis 4*[pikkus "6 2"]8
avaldis {{sõna üks} < "sõna $a"}0

Operaatorid

Kehtivad operaatorid on loetletud allpool, rühmitatud tähtsuse kahanevas järjekorras:

  • - + ~ !: Unaarne miinus, ühekordne pluss, bitipõhine EI, loogiline EI. Ühtegi neist operandidest ei tohi rakendada stringoperandidele ja bitipõhiselt EI tohi rakendada ainult täisarvudele.
  • * / %: korrutamine, jagamine, jääk. Ühtegi neist operandidest ei saa rakendada stringoperandidele ja jääki võib rakendada ainult täisarvudele. Ülejäänud osal on alati sama märk kui jagajal ja absoluutväärtus on jagajast väiksem.
  • + -: liita ja lahutada. Kehtib kõigi arvoperandide jaoks.
  • << >>: Vasak ja parem vahetus. Kehtib ainult täisarvuliste operandide jaoks. Nihe paremale levitab alati märgibitti.
  • < > <= >=: Boole'i ​​väärtus väiksem, suurem, väiksem või võrdne ja suurem või võrdne. Iga operaator annab 1, kui tingimus on tõene, 0 muul juhul. Neid operaatoreid saab rakendada nii stringidele kui ka arvoperandidele, sel juhul kasutatakse stringide võrdlust.
  • == !=: Boolean võrdne ja mitte võrdne. Iga operaator annab null/üks tulemuse. Kehtib kõikide operanditüüpide jaoks.
  • &: Bitipõhine JA. Kehtib ainult täisarvuliste operandide jaoks.
  • ^: Bitipõhiselt eksklusiivne VÕI. Kehtib ainult täisarvuliste operandide jaoks.
  • |: Bitipõhine VÕI. Kehtib ainult täisarvuliste operandide jaoks.
  • &&: Loogiline JA. Annab tulemuse 1, kui mõlemad operandid on nullist erinevad, muidu 0. Kehtib ainult tõeväärtuslike ja numbriliste (täisarvud või ujukoma) operandid.
  • ||: Loogiline VÕI. Annab tulemuse 0, kui mõlemad operandid on nullid, muidu 1. Kehtib ainult tõeväärtuslike ja numbriliste (täisarvud või ujukoma) operandid.
  • x?y:z: Kui-siis-muidu, nagu C-s. Kui x hindab nullist erinevaks, siis on tulemuseks väärtus y. Vastasel juhul on tulemuseks väärtus z. The x operandil peab olema arvväärtus.

Iga operaatori tulemuste kohta lisateabe saamiseks vaadake C-juhendit. Kõik kahendoperaatorid rühmitada vasakult paremale samal prioriteetsuse tasemel. Näiteks käsk.

avaldis 4*2 < 7

tagastab 0.

The &&, ||, ja ?: operaatoritel on "laisk hindamine", nagu ka C-s, mis tähendab, et operande ei hinnata, kui neid pole tulemuse määramiseks vaja. Näiteks aastal käsk

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

ainult üks [a] või [b] tegelikult hinnatakse, sõltuvalt väärtusest $v. Pange tähele, et see kehtib ainult siis, kui kogu avaldis on sulgudes; vastasel juhul hindab Tcl-i parser mõlemat [a] ja [b] enne kutsumist avald käsk.

Matemaatilised funktsioonid

Tcl toetab avaldistes järgmisi matemaatilisi funktsioone:

  • kõhulihased (arg): tagastab väärtuse absoluutväärtuse arg. Arg võib olla kas täisarv või ujukoma ja tulemus tagastatakse samal kujul.
  • acos(arg): tagastab kaarekoosinuse arg, vahemikus [0,pi] radiaani. Arg peaks olema vahemikus [-1,1].
  • nagu(arg): Tagastab kaare siinuse arg, vahemikus [-pi/2,pi/2] radiaani. Arg peaks olema vahemikus [-1,1].
  • atan(arg): tagastab kaartangensi arg, vahemikus [-pi/2,pi/2] radiaani.
  • atan2(x, y): tagastab kaartangensi y/x, vahemikus [-pi, pi] radiaanid. x ja y mõlemad ei saa olla 0.
  • ceil(arg): tagastab väikseima täisarvu väärtuse, mis ei ole väiksem kui arg.
  • cos(arg): Tagastab koosinuse arg, mõõdetuna radiaanides.
  • cosh(arg): Tagastab hüperboolse koosinuse arg. Kui tulemus põhjustaks ülevoolu, tagastatakse viga.
  • double(arg): Kui arg on ujuvväärtus, tagastab arg, muidu teisendab arg ujuvaks ja tagastab teisendatud väärtuse.
  • exp(arg): tagastab eksponentsiaali arg, määratletud kui e**arg. Kui tulemus põhjustaks ülevoolu, tagastatakse viga.
  • korrus (arg): tagastab suurima integraalväärtuse, mis ei ole suurem kui arg.
  • fmod(x, y): tagastab jaotuse ujukomajäägi x kõrval y. Kui y on 0, tagastatakse viga.
  • hüpot (x, y): Arvutab täisnurkse kolmnurga hüpotenuusi pikkuse (x*x+y*y).
  • int(arg): Kui arg on täisarv, tagastab arg, muidu teisendab arg täisarvuks kärbimise teel ja tagastab teisendatud väärtuse.
  • log(arg): Tagastab naturaallogaritmi arg. Arg peab olema positiivne väärtus.
  • log10(arg): tagastab 10 baaslogaritmi arg. Arg peab olema positiivne väärtus.
  • pow(x, y): Arvutab väärtuse x võimule tõstetud y. Kui x on negatiivne, y peab olema täisarv.
  • rand(): tagastab ujukomaarvu nullist alla ühe või matemaatiliselt vahemiku [0,1). Seeme pärineb masina sisemisest kellast või selle saab srand-funktsiooniga käsitsi seadistada.
  • ümmargune (arg): Kui arg on täisarv, tagastab arg, muidu teisendab arg täisarvuks ümardades ja tagastab teisendatud väärtuse.
  • patt (arg): Tagastab siinuse arg, mõõdetuna radiaanides.
  • sinh(arg): Tagastab hüperboolse siinuse arg. Kui tulemus põhjustaks ülevoolu, tagastatakse viga.
  • sqrt(arg): tagastab ruutjuure arg. Arg peab olema mittenegatiivne.
  • srand(arg): arg, mis peab olema täisarv, kasutatakse juhuslike arvude generaatori seemne lähtestamiseks. Tagastab esimese juhusliku arvu sellest seemnest. Igal tõlgil on oma seeme.
  • tan(arg): Tagastab puutuja arg, mõõdetuna radiaanides.
  • tanh(arg): Tagastab hüperboolse puutuja arg.

Lisaks eelmääratletud funktsioonidele võivad rakendused määratleda täiendavaid funktsioone kasutades Tcl_CreateMathFunc().

Tüübid, ülevool ja täpsus

Kõik sisemised arvutused, mis hõlmavad täisarve, tehakse C-tüübiga pikk, ja kõik ujukomaga sisemised arvutused tehakse C-tüübiga kahekordne. Stringi ujukomaks teisendamisel tuvastatakse eksponendi ületäitumine ja tulemuseks on Tcl-tõrge. Stringist täisarvuks teisendamiseks sõltub ületäitumise tuvastamine mõne kohaliku C teegi rutiinide käitumisest, seega tuleks seda pidada ebausaldusväärseks. Igal juhul ei tuvastata täisarvu üle- ja alatäit vahepealsete tulemuste puhul üldiselt usaldusväärselt. Ujukoma üle- ja alatäitmine tuvastatakse riistvara poolt toetatud määral, mis on üldiselt üsna usaldusväärne.

Täisarvude, ujukoma- ja stringoperandide sisemiste esituste teisendamine toimub vastavalt vajadusele automaatselt. Aritmeetilisteks arvutusteks kasutatakse täisarve, kuni sisestatakse ujukomaarv, mille järel kasutatakse ujukoma. Näiteks,

avaldis 5/4

tagastab 1, samas.

avaldis 5 / 4,0
avaldis 5 / ( [stringi pikkus "abcd"] + 0,0)

mõlemad tagasi 1.25. Ujukoma väärtused tagastatakse alati märgiga ``.'' või an e et need ei näeks välja nagu täisarvud. Näiteks,

avaldis 20,0/5,0

naaseb 4.0, mitte 4.

Stringoperatsioonid

Stringiväärtusi võib kasutada võrdlusoperaatorite operandidena, kuigi avaldise hindaja proovib võimalusel võrrelda täisarvu või ujukoma. Kui võrdluse üks operanditest on string ja teisel on arvväärtus, teisendatakse numbriline operaand tagasi stringiks, kasutades C sprintf vormingu täpsustaja %d täisarvude ja %g ujukomaväärtuste jaoks. Näiteks käsud:

avaldis {"0x03" > "2"}
avaldis {"0 a" < "0x12"}

mõlemad tagastavad 1. Esimene võrdlus tehakse täisarvude võrdluse abil ja teine ​​tehakse stringide võrdlusega pärast teise operandi teisendamist stringiks 18. Kuna Tcl-il on kalduvus käsitleda väärtusi võimaluse korral arvudena, ei ole üldiselt hea mõte kasutada selliseid operaatoreid nagu == kui soovite tõesti stringide võrdlust ja operandide väärtused võivad olla suvalised; sellistel juhtudel on parem kasutada string käsu asemel.