Linux / Unix Command: expr

Pangalan

expr - Suriin ang isang expression

Buod

expr arg ? arg arg ... ?

Ang mga concatenates arg 's (pagdaragdag ng mga puwang ng separator sa pagitan ng mga ito), sinusuri ang resulta bilang isang ekspresyong Tcl, at nagbabalik ng halaga. Ang mga operator na pinahihintulutan sa mga ekspresyon ng Tcl ay isang subset ng mga operator na pinahintulutan sa mga ekspresyon ng C, at mayroon silang parehong kahulugan at pangunahan bilang mga kaukulang operator ng C. Ang mga expression ay halos palaging nagbubunga ng mga numerong resulta (integer o floating-point values). Halimbawa, ang pananalita

expr 8.2 + 6

sinusuri sa 14.2. Ang mga ekspresyong Tcl ay naiiba sa mga ekspresyon ng C sa paraan na tinukoy. Gayundin, ang mga expression ng Tcl ay sumusuporta sa mga di-numerong operand at paghahambing ng string.

Operands

Ang isang tcl expression ay binubuo ng isang kumbinasyon ng mga operands, mga operator, at mga panaklong. Maaaring gamitin ang puting espasyo sa pagitan ng mga operand at operator at mga panaklong; ito ay hindi pinansin ng mga tagubilin ng pagpapahayag. Kung posible, ang mga operasyon ay binibigyang kahulugan bilang mga halaga ng integer. Ang mga halaga ng integer ay maaaring tinukoy sa decimal (ang normal na kaso), sa octal (kung ang unang character ng operand ay 0 ), o sa hexadecimal (kung ang unang dalawang character ng operand ay 0x ). Kung ang isang operand ay walang isa sa mga format ng integer na ibinigay sa itaas, pagkatapos ito ay itinuturing bilang isang lumulutang-point na numero kung iyon ay posible. Ang mga numero ng nakalutang-point ay maaaring tinukoy sa alinman sa mga paraan na tinanggap ng compiler ng ANSI-compliant C (maliban na ang mga f , F , l , at L suffixes ay hindi pahihintulutan sa karamihan ng mga pag-install). Halimbawa, ang lahat ng mga sumusunod ay wastong mga numero ng lumulutang na numero: 2.1, 3., 6e4, 7.91e + 16. Kung walang numeric interpretation ay posible, kung ang isang operand ay naiwan bilang isang string (at lamang ng isang limitadong hanay ng mga operator ay maaaring mailapat dito).

Ang mga operasyon ay maaaring tinukoy sa alinman sa mga sumusunod na paraan:

[1]

Bilang isang numerong halaga, alinman sa integer o lumulutang-point.

[2]

Bilang isang variable ng Tcl, gamit ang standard $ notation. Ang halaga ng variable ay gagamitin bilang operand.

[3]

Bilang isang string na nakapaloob sa double-quotes. Ang ekspresyon ng parser ay gagawa ng backslash, variable, at command substitutions sa impormasyon sa pagitan ng mga quotes, at gamitin ang resultang halaga bilang operand

[4]

Bilang isang string na nakapaloob sa tirante. Ang mga character sa pagitan ng bukas na suhay at pagtutugma ng malapit na suhay ay gagamitin bilang operand nang walang anumang mga pamalit.

[5]

Bilang isang command na Tcl na nakapaloob sa mga braket. Ang utos ay isasagawa at ang resulta nito ay gagamitin bilang operand.

[6]

Bilang isang mathematical function na ang mga argumento ay may alinman sa mga form sa itaas para sa mga operand, tulad ng kasalanan ($ x) . Tingnan sa ibaba para sa isang listahan ng mga tinukoy na function.

Kung saan ang mga kapalit ay nangyari sa itaas (hal. Sa loob ng mga string na naka-quote), ang mga ito ay ginagawa sa pamamagitan ng mga tagubilin ng pagpapahayag. Gayunpaman, ang isang karagdagang layer ng pagpapalit ay maaaring maisagawa na ng command parser bago ang tinatawag na processor ng expression. Tulad ng tinalakay sa ibaba, kadalasang pinakamahusay na isama ang mga expression sa mga tirante upang maiwasan ang command parser mula sa pagsasagawa ng mga pamalit sa mga nilalaman.

Para sa ilang mga halimbawa ng mga simpleng expression, ipagpalagay na ang variable a ay may halaga 3 at ang variable b ay may halaga 6. Pagkatapos ang command sa kaliwang bahagi ng bawat isa sa mga linya sa ibaba ay bubuo ng halaga sa kanang bahagi ng linya:

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

Mga operator

Ang mga may-bisang operator ay nakalista sa ibaba, na pinagsama sa nagpapababa ng pagkakasunud-sunod ng mga sumusunod:

- + ~!

Unary minus, unary plus, bit-wise HINDI, lohikal na HINDI. Wala sa mga ito ang mga operasyon ay maaaring mailapat sa mga operand sa string, at ang bit-wise HINDI ay maaaring mailalapat lamang sa mga integer.

* /%

Multiply, hatiin, natira. Wala sa mga operand na ito ang maaaring mailapat sa mga operand ng string, at ang natitira ay maaaring mailalapat lamang sa mga integer. Ang natitira ay laging magkakaroon ng parehong tanda bilang panghati at isang lubos na halaga na mas maliit kaysa sa panghati.

+ -

Magdagdag at ibawas. Wasto para sa anumang mga numerong operand.

<< >>

Kaliwa at kanan shift. Wastong para sa integer ang nagpapatakbo lamang. Ang isang laging paglilipat ay laging nagpapalaganap ng bit sign.

<> <=> =

Ang Boolean ay mas mababa, mas malaki, mas mababa kaysa sa o pantay, at mas malaki kaysa o pantay. Ang bawat operator ay gumagawa ng 1 kung ang kondisyon ay totoo, kung hindi man. Ang mga operator ay maaaring ilapat sa mga string pati na rin ang mga numerong operand, kung saan ginagamit ang paghahambing ng string ng kaso.

==! =

Ang Boolean ay pantay at hindi katumbas. Ang bawat operator ay gumagawa ng isang zero / isang resulta. Wasto para sa lahat ng uri ng operand.

&

Bit-wise AND. Wastong para sa integer ang nagpapatakbo lamang.

^

Masyadong matalino eksklusibo O. Wastong para sa integer ang nagpapatakbo lamang.

|

Bit-wise OR. Wastong para sa integer ang nagpapatakbo lamang.

&&

Lohikal AT. Gumagawa ng isang 1 resulta kung ang parehong mga operand ay hindi zero, kung hindi man. Ang mga valid para sa boolean at numeric (integer o floating-point) ay nagpapatakbo lamang.

||

Lohikal O. Gumagawa ng 0 resulta kung ang parehong mga operand ay zero, kung hindi man. Ang mga valid para sa boolean at numeric (integer o floating-point) ay nagpapatakbo lamang.

x ? y : z

Kung-iba pa, tulad ng sa C. Kung x sinusuri sa non-zero, pagkatapos ang resulta ay ang halaga ng y . Kung hindi, ang resulta ay ang halaga ng z . Ang operand ng x ay dapat may numerong halaga.

Tingnan ang manwal ng C para sa higit pang mga detalye sa mga resulta na ginawa ng bawat operator. Ang lahat ng mga grupo ng binary operator ay kaliwa-sa-kanan sa loob ng parehong antas ng precedence. Halimbawa, ang utos

expr 4 * 2 <7

babalik 0.

Ang && , || , at : ang mga operator ay may `` tamad na pagsusuri '', tulad ng sa C, na nangangahulugan na ang mga operand ay hindi sinusuri kung hindi sila kinakailangan upang matukoy ang kinalabasan. Halimbawa, sa utos

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

isa lamang sa [a] o [b] ang susuriin, depende sa halaga ng $ v . Tandaan, gayunpaman, na ito ay totoo lamang kung ang buong pagpapahayag ay nakapaloob sa mga tirante; kung hindi man, susuriin ng Tcl parser ang parehong [a] at [b] bago gamitin ang expr command.

Mga Function ng Math

Sinusuportahan ng Tcl ang mga sumusunod na mga function ng matematika sa mga expression:

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 )

Ibinabalik ang absolute value ng arg . Ang Arg ay maaaring alinman sa integer o lumulutang-point, at ang resulta ay ibinalik sa parehong form.

acos ( arg )

Ibinabalik ang arc cosine ng arg , sa range [0, pi] radians. Ang arg ay dapat nasa hanay [-1, 1].

asin ( arg )

Ibinabalik ang arc sine ng arg , sa range [-pi / 2, pi / 2] radians. Ang arg ay dapat nasa hanay [-1, 1].

atan ( arg )

Ibinabalik ang arc tangent ng arg , sa range [-pi / 2, pi / 2] radians.

atan2 ( x, y )

Ibinabalik ang arc tangent ng y / x , sa saklaw [-pi, pi] radians. x at y ay maaaring hindi pareho ang 0.

ceil ( arg )

Ibinabalik ang pinakamaliit na halaga ng integer na hindi mas mababa sa arg .

cos ( arg )

Ibinabalik ang cosine ng arg , sinusukat sa radians.

cosh ( arg )

Ibinabalik ang hyperbolic cosine ng arg . Kung ang resulta ay magiging sanhi ng overflow, ang isang error ay ibinalik.

double ( arg )

Kung ang arg ay isang lumulutang na halaga, nagbabalik ng arg , kung hindi ay nag-convert ng arg sa lumulutang at nagbabalik ng na-convert na halaga.

exp ( arg )

Ibinabalik ang pagpaparami ng arg , na tinukoy bilang e ** arg . Kung ang resulta ay magiging sanhi ng overflow, ang isang error ay ibinalik.

sahig ( arg )

Ibinabalik ang pinakamalaking halaga ng integral na hindi lalagpas sa arg .

fmod ( x, y )

Ibinabalik ang nalalabing-natitirang punto ng dibisyon ng x sa pamamagitan ng y . Kung y ay 0, isang error ay ibinalik.

hypot ( x, y )

Compute ang haba ng hypotenuse ng isang right-angled triangle ( x * x + y * y ).

int ( arg )

Kung ang arg ay isang halaga ng integer, nagbabalik ng arg , kung hindi ay nag-convert ng arg sa integer sa pamamagitan ng pagtanggal at ibalik ang na-convert na halaga.

log ( arg )

Ibinabalik ang likas na logarithm ng arg . Ang Arg ay dapat na isang positibong halaga.

log10 ( arg )

Ibinabalik ang base 10 logarithm ng arg . Ang Arg ay dapat na isang positibong halaga.

pow ( x, y )

Computes ang halaga ng x itinaas sa kapangyarihan y . Kung ang negatibo ay x , ang y ay dapat na isang halaga ng integer.

rand ()

Ibinabalik ang isang lumulutang na numero mula sa zero hanggang sa mas mababa sa isang o, sa mga termino sa matematika, ang saklaw [0,1]. Ang binhi ay nagmula sa panloob na orasan ng makina o maaaring itakda nang manu-mano sa pag-andar ng srand.

ikot ( arg )

Kung arg ay isang halaga ng integer, nagbabalik ng arg , kung hindi ay nagpalit ng arg sa integer sa pamamagitan ng pag-ikot at nagbabalik ng na-convert na halaga.

kasalanan ( arg )

Ibinabalik ang sine ng arg , sinusukat sa radians.

sinh ( arg )

Ibinabalik ang hyperbolic sine ng arg . Kung ang resulta ay magiging sanhi ng overflow, ang isang error ay ibinalik.

sqrt ( arg )

Ibinabalik ang square root ng arg . Ang Arg ay dapat na di-negatibo.

srand ( arg )

Ang arg , na dapat ay isang integer, ay ginagamit upang i-reset ang binhi para sa random na numero ng generator. Ibinabalik ang unang random na numero mula sa binhi na iyon. Ang bawat interpreter ay may sariling binhi.

tan ( arg )

Ibinabalik ang padaplis ng arg , sinusukat sa radians.

tanh ( arg )

Ibinabalik ang hyperbolic tangent ng arg .

Bilang karagdagan sa mga paunang natukoy na function, maaaring tukuyin ng mga application ang mga karagdagang function gamit ang Tcl_CreateMathFunc ().

Uri, Overflow, at Precision

Ang lahat ng mga panloob na computations na kinabibilangan ng integers ay tapos na sa uri ng C mahaba , at ang lahat ng mga panloob na computations na kinasasangkutan lumulutang-point ay tapos na sa C uri double . Kapag nagko-convert ang isang string sa lumulutang-point, ang exponent overflow ay nakita at nagreresulta sa isang Tcl error. Para sa conversion sa integer mula sa string, ang pagkakita ng overflow ay depende sa pag-uugali ng ilang mga gawain sa lokal na library ng C, kaya dapat itong ituring bilang hindi kapani-paniwala. Sa anumang kaso, ang integer overflow at underflow sa pangkalahatan ay hindi nakitang maaasahan para sa mga intermediate na resulta. Lumulutang-point overflow at underflow ay nakita sa degree na suportado ng hardware, na kung saan ay karaniwang medyo maaasahan.

Ang conversion sa mga panloob na representasyon para sa integer, floating-point, at string na mga operasyon ay tapos na awtomatikong kung kinakailangan. Para sa mga pag-compute ng aritmetika, ginagamit ang mga integer hanggang ilang ipinakilala ang lumulutang na punto na numero, at pagkatapos ay ginagamit ang lumulutang na punto. Halimbawa,

expr 5/4

nagbabalik 1, habang

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

parehong bumalik 1.25. Ang mga halaga ng lumulutang na punto ay palaging ibabalik na may `` . '' o isang e upang hindi sila magmukhang mga halaga ng integer. Halimbawa,

expr 20.0 / 5.0

Nag balik ang 4.0 , hindi 4 .

String Operations

Maaaring gamitin ang mga halaga ng string bilang mga operand ng mga operator ng paghahambing, bagaman ang pagsusuri ng tagapagpahayag ay nagsisikap na gumawa ng mga paghahambing bilang integer o lumulutang-point kapag maaari ito. Kung ang isa sa mga operand ng isang paghahambing ay isang string at ang iba ay may numerong halaga, ang numerong operand ay naibalik sa isang string gamit ang C sprintf format specifier % d para sa integer at % g para sa floating-point values. Halimbawa, ang mga utos

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

parehong return 1. Ang unang paghahambing ay tapos na gamit ang paghahambing integer, at ang pangalawang ay tapos na gamit ang string paghahambing pagkatapos ng ikalawang operand ay na-convert sa string 18 . Dahil sa pagkahilig ng Tcl na gamutin ang mga halaga bilang mga numero hangga't maaari, sa pangkalahatan ito ay isang magandang ideya na gamitin ang mga operator tulad ng == kapag talagang gusto mo ang paghahambing ng string at ang mga halaga ng mga operand ay maaaring di-makatwirang; mas mabuti sa mga kasong ito na gamitin ang command string sa halip.

Mga Pagsasaalang-alang sa Pagganap

Ilagay ang mga ekspresyon sa mga tirante para sa pinakamahusay na bilis at pinakamaliit na mga kinakailangan sa imbakan. Pinapayagan nito ang Tcl bytecode compiler upang makabuo ng pinakamahusay na code.

Tulad ng nabanggit sa itaas, ang mga expression ay binago ng dalawang beses: isang beses sa pamamagitan ng Tcl parser at isang beses sa pamamagitan ng expr command. Halimbawa, ang mga utos

magtakda ng isang 3 set b {$ a + 2} expr $ b * 4

bumalik 11, hindi isang maramihang ng 4. Ito ay dahil ang Tcl parser ay unang palitan ang $ a + 2 para sa variable b , pagkatapos ang expr command ay susuriin ang expression $ a + 2 * 4 .

Karamihan sa mga expression ay hindi nangangailangan ng pangalawang ikot ng mga pamalit. Alinman ang mga ito ay nakapaloob sa braces o, kung hindi, ang kanilang mga variable at command substitutions ay nagbibigay ng mga numero o mga string na hindi ang kanilang mga sarili ay nangangailangan ng mga pamalit. Gayunpaman, dahil ang ilang mga unbraced na expression ay nangangailangan ng dalawang round ng mga pamalit, ang bytecode compiler ay dapat magpalabas ng mga karagdagang tagubilin upang mahawakan ang sitwasyong ito. Kinakailangan ang pinakamahal na code para sa mga di-natanggap na mga expression na naglalaman ng mga pamalit na utos. Ang mga expression na ito ay dapat na ipatupad sa pamamagitan ng pagbuo ng bagong code sa bawat oras na ang expression ay naisakatuparan.

Mga Keyword

aritmetika, boolean , ihambing, pagpapahayag, malabo na paghahambing

Mahalaga: Gamitin ang command ng tao ( % man ) upang makita kung paano ginagamit ang isang utos sa iyong partikular na computer.