Linux / Unix Command: ekspr

Jeneng

expr - Evaluasi ekspresi

Sinopsis

expr arg ? arg arg ... ?

Concatenates arg 's (nambah spasi pemisah ing antarané), ngetes asil minangka ekspresi Tcl, lan ngasilake angka kasebut. Operator sing dileksanakake ing ekspresi Tcl minangka subset saka operator sing diidinake ing ekspresi C, lan padha duwe makna sing padha lan precedence minangka operator C sing cocog. Ekspresi meh tansah ngasilake asil numerik (integer utawa nilai floating-point). Contone, ekspresi

expr 8.2 + 6

nguji kanggo 14.2. Ekspresi Tcl beda-beda saka ekspresi C ing cara sing ditindakake. Uga, ekspresi Tcl ndhukung operand non-numerik lan perbandingan senar.

Operasi

Ekspresi Tcl kasusun saka kombinasi operand, operator, lan kurung. Spasi putih bisa digunakake ing antarane operator lan operator lan kurung; iki ora digathekake dening pandhuan kasebut. Where possible, operands diartikake minangka nilai integer. Nilai-nilai integer bisa kasebut ing desimal (kasus normal), ing octal (yen karakter pisanan operan yaiku 0 ), utawa ing heksadesimal (yen rong karakter pertama saka operan iku 0x ). Yen operan ora duwe salah sawijining format integer sing diwenehake ing ndhuwur, mula dianggep minangka nomer floating point yen bisa. Nomer floating-point bisa ditemtokake ing kabeh cara sing ditampa dening kompilator C sing kompatibel ANSI (kajaba suffixes f , F , l , lan L ora bakal dileksanakake ing akeh instalasi). Contone, kabeh sing ana nomer floating-point sing sah: 2.1, 3., 6e4, 7.91e + 16. Yen ora ana interpretasi numerik, banjur operand bakal ditindakake minangka senar (lan mung operator sing winates bisa uga ditrapake).

Operasi bisa ditemokake ing sembarang cara ing ngisor iki:

[1]

Minangka nilai numerik, ana integer utawa floating-point.

[2]

Minangka variabel Tcl, nggunakake standar $ notasi. Nilai variabel kasebut bakal digunakake minangka operand.

[3]

Minangka senar sing ditutup nganggo tanda kutip ganda. Parser ekspresi bakal nindakake backslash, variabel, lan substitusi pangaturan ing informasi antarane kuotasi, lan nggunakake nilai sing diasilake minangka operan

[4]

Minangka senar sing ditutupi ing klient. Karakter antarane panahan mbukak lan pencocokan sing cedhak bakal digunakake minangka operand tanpa penggantian apa wae.

[5]

Minangka printah Tcl sing ditempelake ing braket. Printah iki bakal dileksanakake lan asile bakal digunakake minangka operand.

[6]

Minangka fungsi matématika sing argumen duwé bentuk kasebut kanggo operands, kayata dosa ($ x) . Deleng ngisor iki kanggo dhaptar fungsi sing didéfinisi.

Ing ngendi penggantian dumadi ing ndhuwur (contone kayata ing jero senar), padha ditindakake dening instruksi kasebut. Nanging, lapisan substitusi tambahan bisa uga wis dilakoni dening parser perintah sadurunge prosesor kasebut disebut. Kaya sing kasebut ing ngisor iki, biasane paling apik kanggo ngemot ekspresi ing penyonggo kanggo nyegah parser printah saka nglakokake substitusi ing isi kasebut.

Kanggo sawetara conto prasaja, umpamane variabel sing duwe nilai 3 lan variabel b duwe nilai 6. Banjur perintah ing sisih kiwa saben garis ngisor bakal ngasilake nilai ing sisih tengen garis:

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

Operator

Operator sing bener dicantelake ing ngisor iki, diklompokake miturut urutan sing luwih cedhak:

- + ~!

Unary minus, unary plus, bit-wise NOT, logical NOT. Ora ana opsir sing bisa diterapaké kanggo senar, lan sing ora bisa ditrapake ora mung kanggo integer.

* /%

Multiply, dibagi, sisa. Ora ana opsir sing bisa diterapaké ing stelan, lan sisa-sisa bisa dianggo mung kanggo integer. Sithik bakal tansah nduweni tanda sing padha minangka pembagi lan nilai Absolute luwih cilik tinimbang pembagi.

+ -

Nambah lan nyuda. Valid kanggo sembarang operan numerik.

<< >>

Nggeser kiwa lan tengen. Valid kanggo integer sing dioperasikake. A shift tengen tansah nyebarake bit sign.

<> <=> =

Boolean kurang, luwih gedhe, kurang saka utawa padha, lan luwih gedhe tinimbang utawa padha. Saben operator mrodhuksi 1 yen kondisi kasebut bener, 0 digunakake. Operator kasebut bisa uga dienggo ing senar lan uga operand numerik, ing ngendi kasus pembanding string digunakake.

==! =

Boolean witjaksono lan ora padha. Saben operator mrodhuksi asil nol / siji. Valid kanggo kabeh jinis operand.

&

Cepet-wicaksana lan. Valid kanggo integer sing dioperasikake.

^

Obat sing paling apik. Valid kanggo integer sing dioperasikake.

Deleng uga

Cepet-wise UTAWA. Valid kanggo integer sing dioperasikake.

&&

Logis lan. Ngasilake 1 asil yen loro operand iku non-nol, 0 digunakake. Valid kanggo boolean lan numerik (integer utawa floating-point) mung operasional.

||

Logis UTAWA. Ngasilake 0 asil yen loro operand iku nol, 1 digunakake. Valid kanggo boolean lan numerik (integer utawa floating-point) mung operasional.

x ? y : z

Yen-banjur-liya, kaya ing C. Yen x ngetokake non-nol, mula asile nilai y . Yen ora, asil iku nilai z . Operasi x kudu duwe nilai numerik.

Pirsani manual C kanggo rincian liyane babagan asil sing diprodhuksi dening saben operator. Kabeh grup operator biner kiwa-ke-tengen ing tingkat sing padha. Contone, perintah kasebut

expr 4 * 2 <7

ngasilake 0.

The && , || , lan operator : duwe evaluasi lazily, kaya ing C, sing tegese operands ora dievaluasi yen ora perlu kanggo nemtokake asil. Contone, ing printah

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

mung siji saka [a] utawa [b] sing bener bakal dievaluasi, gumantung saka nilai $ v . Elinga, manawa iki mung bener yen kabeh ekspresi ditutup ing klient; Dadi, parser Tcl bakal ngevaluasi loro [a] lan [b] sadurunge ngajokake perintah expr .

Fungsi Math

Tcl ndhukung fungsi matematika ing ngisor iki:

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 )

Ngasilake nilai absolut saka arg . Arg bisa uga ana integer utawa floating-point, lan asil dikembalikan ing wangun sing padha.

acos ( arg )

Ngasilake busin kosin saka arg , ing rentang [0, pi] radian. Arg kudu ana ing kisaran [-1,1].

asin ( arg )

Ngasilake sine arc saka arg , ing rentang [-pi / 2, pi / 2]. Arg kudu ana ing kisaran [-1,1].

atan ( arg )

Nganti arc tangent saka arg , ing rentang [-pi / 2, pi / 2].

atan2 ( x, y )

Ngliwati tangen arc y / x , ing rentang [-pi, pi]. x lan y ora bisa loro-lorone dadi 0.

ceil ( arg )

Ngganti angka integer paling cilik ora kurang saka arg .

cos ( arg )

Ngasilake kosinus arg , diukur ing radian.

cosh ( arg )

Ngasilake kosinus hiperbolik saka arg . Yen asil bakal nyebabake limpah, kesalahan bakal bali.

pindho ( arg )

Yen arg adalah nilai ngambang, ngasilake arg , digunakake ngowahi arg kanggo ngambang lan ngasilake nilai sing diowahi.

exp ( arg )

Ngasilake eksponensial saka arg , sing ditemtokake minangka e ** arg . Yen asil bakal nyebabake limpah, kesalahan bakal bali.

lantai ( arg )

Nambah angka integral paling gedhé ora luwih saka arg .

fmod ( x, y )

Ngluwihi sisa floating-point saka divisi x kanthi y . Yen y 0, ana kesalahan bali.

hipot ( x, y )

Ngitung dawa saka hypotenuse saka segitiga sikil tengen ( x * x + y * y ).

int ( arg )

Yen arg adalah nilai integer, ngasilake arg , digunakake ngowahi arg kanggo integer kanthi truncation lan ngasilake nilai sing diowahi.

log ( arg )

Ngasilake logaritma alam saka arg . Arg kudu dadi nilai positif.

log10 ( arg )

Ngasilake dasar 10 logarithm arg . Arg kudu dadi nilai positif.

pow ( x, y )

Ngukur nilai x sing diunggahake marang daya. Yen x wis negatif, y kudu dadi nilai integer.

rand ()

Returns a number point floating from zero to less than one or, in terms of mathematical, range [0,1]. Wiji kasebut asalé saka jam internal mesin utawa bisa disetel manual kanthi fungsi srand.

babak ( arg )

Yen arg minangka nilai integer, ngasilake arg , digunakake ngowahi arg kanggo integer kanthi pambulatan lan ngasilake nilai sing diowahi.

dosa ( arg )

Ngasilake sine saka arg , diukur ing radian.

sinh ( arg )

Ngasilake hiperbolik sine arg . Yen asil bakal nyebabake limpah, kesalahan bakal bali.

sqrt ( arg )

Ngasilake akar alun arg . Arg kudu non-negatif.

srand ( arg )

Arg , sing kudu dadi integer, digunakake kanggo ngreset wiji kanggo generator nomer acak. Ngasilake angka acak pisanan saka benih kasebut. Saben juru interpreter nduweni benih dhewe.

tan ( arg )

Ngasilake tangent saka arg , diukur ing radian.

tanh ( arg )

Ngasilake tangent hiperbolik saka arg .

Saliyane fungsi kasebut sing wis ditemtokake, aplikasi bisa nemtokake fungsi tambahan nggunakake Tcl_CreateMathFunc ().

Jinis, Lamu, lan Precision

Saben komputasi internal sing nglibatake integer rampung karo tipe C sing dawa , lan kabeh komputasi internal sing nglibatake floating-point rampung karo tipe C double . Nalika ngonversi string menyang titik ngambang, overflow exponent dideteksi lan nyebabake kesalahan Tcl. Kanggo ngonversi integer saka senar, deteksi overflow gumantung marang prilaku sawetara rutinitas ing perpustakaan C lokal, mula kudu dianggep ora bisa dipercaya. Ing kasus apa wae, overflow lan alihan integer sing umum ora bisa dideteksi kanggo asil intermediate. Ndhuwur-titik ngedhunake lan njugrugan dideteksi nganti derajat sing didhukung dening perangkat keras, sing umum dipercaya banget.

Konversi ing antarane perwakilan internal kanggo integer, floating-point, lan string operands rampung kanthi otomatis kaya sing dibutuhake. Kanggo arta-aritmatika, integers dipigunakaké nganti sawetara nomer floating-point dienal, sawise titik ngambang kasebut digunakake. Tuladhane,

expr 5/4

ngasilake 1, nalika

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

loro bali 1.25. Nilai-nilai floating-point tansah bali kanthi `` . '' utawa e supaya ora katon kaya nilai integer. Tuladhane,

expr 20.0 / 5.0

ngasilake 4.0 , ora 4 .

Operasi Serangan

Nilai-nilai string bisa digunakake minangka operand operator perbandingan, sanajan evaluator ekspresi nyoba kanggo nggawe banding minangka integer utawa floating-point nalika bisa. Yen salah sawijining operand saka sawijining perbandingan minangka senar lan sing liyane duweni nilai numerik, operan numerik bakal diowahi maneh menyang senar nggunakake format spesifik C sprintf % d kanggo integer lan % g kanggo nilai floating-point. Contone, printah

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

loro bali 1. Perbandhingan pisanan wis rampung kanthi nggunakake integer comparison, lan sing liya wis rampung kanthi nggunakake perbandingan string sawise operand kapindho diowahi dadi string 18 . Amarga kecenderungan Tcl kanggo nambani nilai-nilai minangka nomer manawa bisa, ora umum kanthi becik nggunakake operator kaya == nalika sampeyan pancene pengin ngurutake senar lan nilai-nilai operand bisa sewenang-wenang; luwih becik ing kasus kasebut nggunakake perintah senar tinimbang.

Pertimbangan Kinerja

Nyebut ekspresi ing penyonggo kanggo kacepetan sing paling apik lan syarat panyimpenan sing paling cilik. Iki ngidini kompilator bytecode Tcl ngasilake kode paling apik.

Kaya kasebut ing ndhuwur, ekspresi diganti kaping pindho: sapisan dening parser Tcl lan sapisan kanthi perintah expr . Contone, printah

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

bali 11, ora pirang-pirang 4. Iki amarga parser Tcl bakal ngganti $ a + 2 kanggo variabel b , banjur perintah expr bakal ngevaluasi ekspresi $ a + 2 * 4 .

Paling ungkapan ora mbutuhake babak kapindho penggantian. Salah sijine sing dianggo ing kupu-kupu utawa, yen ora, substitusi variabel lan komite menehi nomer utawa strings sing ora dhewe mbutuhake substitusi. Nanging, amarga sawetara ungkapan sing ora diwenehake butuh rong putaran penggantian, compiler bytekode kudu ngetokake instruksi tambahan kanggo nangani kahanan iki. Kode sing paling larang dibutuhake kanggo ekspresi tanpa pratelan sing ngemot substitusi. Ekspresi kasebut kudu diterapake kanthi ngasilake kode anyar saben ekspresi dileksanakake.

Tembung kunci

aritmetika, boolean , mbandingake, ekspresi, fuzzy comparison

Penting: Gunakake perintah wong ( % man ) kanggo ndeleng carane printah sing digunakake ing komputer sampeyan.