Linux Ubuntu / Unix Komando: expr

nami

expr - evaluate hiji éksprési

Synopsis

expr arg? arg arg ...?

Concatenates arg 's (nambahkeun spasi SEPARATOR antara aranjeunna), ngaevaluasi hasilna minangka ekspresi Tcl, sarta mulih nilai. The operator diijinkeun dina ungkapan Tcl ngarupakeun sawaréh ti operator diijinkeun dina ungkapan C, sarta maranéhna boga harti sarua jeung precedence salaku operator C pakait. Ungkapan ampir sok ngahasilkeun hasil numerik (integer atanapi floating-titik nilai). Contona, babasan

expr 8.2 + 6

ngaevaluasi keur 14,2. ungkapan Tcl beda ungkapan C dina cara nu operands nu dieusian. Ogé, ungkapan Tcl ngarojong operands non-numerik Anjeun tur babandinganana senar.

Operands

Hiji ungkapan Tcl diwangun ku kombinasi operands, operator, sarta kurung. spasi bodas bisa dipaké antara operands sarta operator na kurung; eta geus teu dipalire ku parentah babasan urang. Dimana mungkin, operands nu diinterpretasi sakumaha nilai integer. Nilai integer bisa jadi dieusian di decimal (kasus normal), di octal (lamun karakter mimiti operand nyaeta 0), atanapi di hexadecimal (lamun dua karakter mimiti operand nu 0x). Mun hiji operand teu gaduh salah sahiji format integer diberekeun di luhur, mangka anu diolah salaku angka floating-titik mun yén anu mungkin. Angka floating-titik bisa jadi dieusian di salah sahiji cara ditarima ku hiji C kompiler ANSI-patuh (iwal f nu, F, l, sarta L suffixes moal diijinkeun dina paling pamasangan). Contona, sakabéh di handap nu valid angka floating-titik: 2.1, 3., 6e4, 7.91e + 16. Mun euweuh interpretasi numerik mungkin, teras hiji operand geus ditinggalkeun salaku senar (jeung ngan hiji set kawates operator bisa jadi dilarapkeun ka dinya).

Operands bisa jadi dieusian di salah sahiji cara di handap ieu:

[1]

Salaku nilai numerik, boh integer atanapi floating-point.

[2]

Salaku variabel Tcl, maké $ notasi baku. nilai variabel urang bakal dipaké salaku operand nu.

[3]

Salaku string enclosed di ganda-tanda petik. Babasan parser bakal nedunan backslash, variabel, sarta panggantian paréntah dina katerangan antara tanda petik, sarta make nilai anu dihasilkeun salaku operand nu

[4]

Salaku string enclosed di braces. Hurup antara pananggeuy kabuka sarta cocog pananggeuy nutup bakal dipaké salaku operand tanpa panggantian.

[5]

Salaku paréntah Tcl enclosed dina kurung. sorana bakal dieksekusi tur hasilna na bakal dipaké salaku operand nu.

[6]

Salaku fungsi matematik anu alesan kudu salah sahiji bentuk luhur pikeun operands, kayaning dosa ($ x). Tempo dihandap pikeun daptar fungsi tangtu.

Dimana panggantian lumangsung luhur (misalna di jero string dicutat), maranéhna téh dipigawé ku parentah babasan urang. Sanajan kitu, hiji lapisan tambahan tina substitusi mungkin geus geus dipigawé ku parser paréntah méméh processor ekspresi ieu disebut. Salaku dibahas di handap, éta biasana pangalusna pikeun ngalampirkeun ungkapan dina braces keur mencegah paréntah parser tina ngajalankeun panggantian dina eusi.

Kanggo sababaraha conto ungkapan basajan, anggap variabel a boga nilai 3 jeung variabel b boga nilai 6. Lajeng paréntah dina sisi kenca unggal tina garis handap baris ngahasilkeun nilai di sisi katuhu tina jalur:

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

operator

The operator valid nu dibéréndélkeun di handap, dikelompokkeun dina nurunna urutan of precedence:

- + ~!

dikurangan Unary, unary tambah, bit saarah NOT, logis NOT. Taya operands ieu bisa jadi dilarapkeun ka operands string, sarta saeutik saarah NOT bisa jadi dilarapkeun ukur keur wilangan buleud.

* /%

Balikeun, ngabagi, sésana. Taya operands ieu bisa jadi dilarapkeun ka operands string, sarta sésana bisa jadi dilarapkeun ukur keur wilangan buleud. sésana bakal salawasna boga tanda anu sarua salaku divisor na hiji nilai mutlak leutik batan divisor nu.

+ -

Tambahkeun na subtract. Valid pikeun sagala operands numerik.

<< >>

Ditinggalkeun na shift katuhu. Valid pikeun operands integer wungkul. A shift katuhu salawasna ngarambat dina bit tanda.

<> <=> =

Boolean kirang, gede, kurang atawa sarua, sarta gede ti atawa sarua. Unggal operator ngahasilkeun 1 lamun kondisi bener, 0 disebutkeun. operator ieu bisa jadi dilarapkeun ka senar jadi ogé operands numerik, nu ngabandingkeun hal string anu dipaké.

==! =

Boolean sarua teu sarua. Unggal operator ngahasilkeun enol / salah hasilna. Valid keur sakabeh tipe operand.

&

Bit saarah AND. Valid pikeun operands integer wungkul.

^

Bit saarah ekslusif OR. Valid pikeun operands integer wungkul.

|

Bit saarah OR. Valid pikeun operands integer wungkul.

&&

Logis AND. Ngahasilkeun 1 hasil lamun duanana operands nu non-enol, 0 disebutkeun. Valid pikeun boolean na numerik (wilangan buleud atanapi floating-titik) operands wungkul.

||

Logis OR. Ngahasilkeun 0 hasilna lamun duanana operands téh enol, 1 disebutkeun. Valid pikeun boolean na numerik (wilangan buleud atanapi floating-titik) operands wungkul.

x? y: z

Lamun-lajeng-sejenna, saperti dina C. Lamun x ngaevaluasi keur non-enol, lajeng hasilna mangrupa nilai y. Upami teu kitu, hasilna téh nilai z. X operand kudu boga nilai numerik.

Tempo manual C pikeun detil nu langkung lengkep ihwal hasil dihasilkeun unggal operator. Sadaya operator binér group ditinggalkeun-to-katuhu dina tingkat precedence sami. Contona, sorana

expr 4 * 2 <7

mulih 0.

&& The, || , Sarta:? Operator kudu `` kedul evaluasi '', ngan di C, nu hartina operands teu dievaluasi lamun maranéhna teu diperlukeun pikeun nangtukeun hasilna. Contona, dina paréntah

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

ngan salah sahiji [a] atanapi [b] baris sabenerna jadi dievaluasi, gumantung kana nilai tina $ v. Catetan kitu, eta ieu ukur bener lamun sakabéh ekspresi anu enclosed di braces; disebutkeun, anu parser Tcl bakal evaluate duanana [a] jeung [b] saméméh invoking paréntah expr.

Fungsi math

Tcl ngarojong pungsi matematik handap dina ungkapan:

ABS cosh log sqrt acos ganda log10 srand asin exp pow tan lanté atan Rand tanh atan2 fmod babak dosa ceil hypot cos int sinh

ABS (arg)

Mulih nilai mutlak arg. Arg bisa jadi boh integer atanapi floating-titik, sarta hasilna ieu balik dina bentuk sarua.

acos (arg)

Mulih ka kosinus arc of arg, dina rentang [0, pi] radian. Arg kedah di rentang [-1,1].

asin (arg)

Mulih sinus arc of arg, dina rentang [-pi / 2, pi / 2] radian. Arg kedah di rentang [-1,1].

atan (arg)

Mulih ka tangent arc of arg, dina rentang [-pi / 2, pi / 2] radian.

atan2 (x, y)

Mulih ka tangent arc of y / x, dina rentang [-pi, pi] radian. x jeung y teu bisa duanana jadi 0.

ceil (arg)

Mulih ka nilai integer pangleutikna teu kirang ti arg.

cos (arg)

Mulih ka kosinus of arg, diukur dina radian.

cosh (arg)

Mulih ka kosinus hyperbolic of arg. Mun hasilna bakal ngakibatkeun hiji mudal, kasalahan anu balik.

ganda (arg)

Mun arg mangrupakeun nilai ngambang, mulih arg, disebutkeun ngarobah arg ka ngambang na mulih nilai dirobah.

exp (arg)

Mulih ka eksponensial tina arg, diartikeun e ** arg. Mun hasilna bakal ngakibatkeun hiji mudal, kasalahan anu balik.

floor (arg)

Mulih ka nilai integral panggedena teu leuwih gede ti arg.

fmod (x, y)

Mulih ti floating-titik sésana tina division x ku y. Lamun y nyaéta 0, kasalahan anu balik.

hypot (x, y)

Perhitungan panjang hypotenuse of a segitiga katuhu-angled (x * x + y * y).

int (arg)

Mun arg mangrupa nilai integer, mulih arg, disebutkeun ngarobah arg mun integer ku truncation na mulih nilai dirobah.

asup (arg)

Mulih dina bentuk natural logarithm arg. Arg kedah janten nilai positif.

log10 (arg)

Mulih dasar 10 logaritma arg. Arg kedah janten nilai positif.

pow (x, y)

Perhitungan nilai x diangkat kana kakuatan y. Lamun x nyaeta négatip, y kudu jadi hiji nilai integer.

Rand ()

Mulih jumlah titik floating ti enol nepi ka ngan kirang ti salah sahiji atawa, dina istilah matematika, rentang [0,1). si cikal asalna tina jam internal tina mesin atawa bisa jadi diatur manual jeung fungsi srand.

babak (arg)

Mun arg mangrupa nilai integer, mulih arg, disebutkeun ngarobah arg mun integer ku rounding na mulih nilai dirobah.

dosa (arg)

Mulih sinus tina arg, diukur dina radian.

sinh (arg)

Mulih sinus hyperbolic of arg. Mun hasilna bakal ngakibatkeun hiji mudal, kasalahan anu balik.

sqrt (arg)

Mulih akar kuadrat arg. Arg kudu jadi non-négatip.

srand (arg)

The arg, anu kedah janten hiji integer, anu dipaké pikeun ngareset cikal keur jumlah generator acak. Mulih jumlah acak munggaran tina siki éta. Unggal juru boga siki sorangan.

tan (arg)

Mulih ka tangent of arg, diukur dina radian.

tanh (arg)

Mulih ka tangent hyperbolic of arg.

Salian ieu fungsi siap pake, aplikasi bisa nangtukeun fungsi tambahan maké Tcl_CreateMathFunc ().

Jenis, mudal, sarta Precision

Kabéh komputer internal ngalibetkeun wilangan buleud anu dipigawé kalawan jenis C panjang, sarta kabeh komputer internal ngalibetkeun floating-point anu dipigawé kalawan jenis C ganda. Nalika ngarobah string ka ngambang-titik, exponent mudal nu dideteksi jeung hasil dina kasalahan Tcl. Pikeun ngarobah kana integer ti string, beungeut mudal gumantung kana paripolah sabagian Kabiasaan dina perpustakaan C lokal, ku kituna kudu dihargaan salaku usulna teu jelas. Dina sagala hal, integer mudal na underflow umumna teu kauninga reliably pikeun hasil panengah. Floating-titik mudal na underflow anu kauninga ka gelar dirojong ku hardware, nu sacara umum geulis dipercaya.

Konversi diantara Répréséntasi internal pikeun integer, floating-titik, sarta operands string dipigawé otomatis sakumaha diperlukeun. Pikeun komputer arithmetic, wilangan buleud dipaké dugi sababaraha angka floating-titik ieu kenalkeun, satutasna floating-point anu dipaké. Salaku conto,

expr 5/4

mulih 1, bari

expr 5 / 4.0 expr 5 / ([string panjang "ABCD"] + 0.0)

duanana balik 1,25. Nilai floating-point anu salawasna balik ku ``. '' Atanapi hiji e ambéh maranéhanana moal kasampak kawas nilai integer. Salaku conto,

expr 20,0 / 5.0

mulih 4.0, teu 4.

Operasi string

nilai string bisa dipaké salaku operands sahiji operator ngabandingkeun, sanajan ekspresi evaluator nyoba ngalakukeun babandinganana salaku integer atanapi floating-titik nalika mémang. Lamun salah sahiji operands of ngabandingkeun hiji senar a jeung lianna mibanda nilai numerik, anu operand numerik dirobah deui ka string ngagunakeun C sprintf format specifier% d pikeun wilangan buleud sarta% g keur nilai floating-point. Contona, dina paréntah

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

duanana balik 1. ngabandingkeun munggaran geus rengse maké babandingan integer, sarta kadua geus rengse maké babandingan string sanggeus operand kadua dirobah jadi string 18. Kusabab kacenderungan Tcl urang pikeun ngubaran nilai salaku angka sabisana, teu umum mangrupakeun ide nu sae pikeun make operator kawas == lamun anjeun rék ngabandingkeun string jeung nilai teh operands bisa jadi sawenang; éta hadé dina kasus ieu ngagunakeun paréntah string gantina.

pertimbangan kinerja

Ngalampirkeun ungkapan dina braces keur speed pangalusna sarta sarat gudang pangleutikna. Hal ieu ngamungkinkeun Tcl bytecode kompiler keur ngahasilkeun kodeu pangalusna.

Sakumaha didadarkeun di luhur, ungkapan anu Cirian dua kali: sakali ku parser Tcl sarta sakaligus ku paréntah expr. Contona, dina paréntah

nangtukeun hiji 3 set b {$ a + 2} expr $ b * 4

balik 11 moal kakalian 4. Ieu alatan dina parser Tcl baris kahiji diganti $ a + 2 keur variabel b, teras paréntah expr bakal evaluate babasan $ a + 2 * 4.

Paling ungkapan teu merlukeun hiji babak kadua panggantian. Boh sipatna enclosed di braces atanapi, upami teu, variabel jeung parentah maranéhna panggantian ngahasilkeun angka atawa senar éta ulah sorangan teu merlukeun panggantian. Sanajan kitu, ku sabab sababaraha ungkapan unbraced kudu dua rounds panggantian, anu kompiler bytecode kedah emit parentah tambahan pikeun nanganan situasi ieu. Kodeu paling mahal anu diperlukeun pikeun ungkapan unbraced nu ngandung panggantian paréntah. ungkapan ieu wajib dilaksanakeun ku generating kode anyar unggal waktos babasan ieu dibales.

Konci

arithmetic, boolean , ngabandingkeun, babasan, ngabandingkeun Fuzzy

Nu penting: Paké paréntah lalaki (% lalaki) ningali kumaha paréntah nu dipaké dina komputer husus Anjeun.