Linux / Unix Command: expr

Нэр

expr - Үзэл бодлыг үнэлэх

Ерөнхий агуулга

expr arg ? Арг arg ... ?

Concatenates arg (тэдгээрийн хоорондох зайг тусгаарлах зай), үр дүнг Tcl илэрхийлэл гэж үнэлж, утгыг буцаана. Tcl илэрхийлэлд зөвшөөрөгдсөн операторууд нь C илэрхийллүүдэд зөвшөөрөгдсөн операторуудын дэд хэсэг бөгөөд тэдгээр нь холбогдох C операторуудтай ижил утгатай, давуу байдалтай байна. Илэрхийллүүд нь үргэлж тоон үр дүнг гаргадаг (бүхэл тоо эсвэл хөвөгч цэгийн утга). Жишээ нь, илэрхийлэл

expr 8.2 + 6

14.2-т үнэлнэ. Tcl илэрхийлэл нь үйлдэл тодорхойлогддог C илэрхийллээс ялгаатай. Мөн Tcl илэрхийлэл нь тоон бус алгоритм болон мөрийн харьцуулалтыг дэмждэг.

Үйл ажиллагаа

Tcl илэрхийлэл нь үйлдлүүд, операторууд, хаалтуудаас бүрдэнэ. Цагаан зайг operators, operators болон хаалт хооронд ашиглаж болно; Энэ нь илэрхийллийн заавраар үл тоомсорлодог. Боломжтой бол үйлдэлүүдийг бүхэл тоо гэж тайлбарладаг. Бүхэл тоон утгыг аравтын бутархай (хэвийн тохиолдолд), oкалаль (хэрэв үйлдлийн эхний тэмдэгт 0 бол), эсвэл арван зургаатын үед (хэрэв үйлдлийн эхний хоёр тэмдэгт нь 0х байвал ) байж болно. Дээр өгөгдсөн бүхэл тоон форматын аль нэг нь байхгүй бол хэрэв энэ нь боломжтой бол хөвөгч цэгийн утга гэж үздэг. Хөвөгчийн цэгийн тоо ANSI-нийцтэй С хөрвүүлэгчийн хүлээн зөвшөөрсөн аль ч хэлбэрээр тодорхойлогдож болно (ихэнх тохиолдолд f , F , l , L элементүүд зөвшөөрөгдөхгүй. Жишээ нь, доорх бүх зүйлс нь хөвөгч цэгийн хүчинтэй байна: 2.1, 3., 6e4, 7.91e + 16. Хэрэв тоон тайлбар байхгүй бол, командыг мөр болгон үлдээдэг (мөн хязгаарлагдмал олон тооны операторууд үүнийг хэрэглэж болно).

Үйлдлийн системийг дараах аргуудын аль нэгээр тодорхойлж болно:

[1]

Тоон утгын хувьд бүхэл тоо эсвэл хөвөгч цэг байна.

[2]

Tcl хувьсагчийн хувьд стандарт $ тэмдэглэгээг ашиглана. Хувьсагчийн утга нь үйлчлэгчээр ашиглагдах болно.

[3]

Давхар хашилтанд бичсэн тэмдэгт мөрийн хувьд. Үзүүлэлтийн parser нь backslash, хувьсагч, өгөгдлүүдийг орлуулах үүний хооронд мэдээлэл дээр тушаал оруулан, үр дүнг ашигладаг

[4]

Хаалтанд хаалттай хэлхээний хувьд. Нээлттэй холбох хэрэгслийн хооронд ойрхон холбох тэмдэгтүүд нь ямар нэгэн орлуулахгүйгээр ашигладаг.

[5]

Tcl тушаал нь хаалтанд хаалтанд байна. Тушаалыг гүйцэтгэх бөгөөд үр дүнг ашиглахад ашиглах болно.

[6]

Математикийн функц нь нүгэл ($ x) гэх мэт үйлдлийн хувьд дээрх аргуудын аль нэгийг агуулж байдаг. Тодорхой функцүүдийн жагсаалтыг доороос үзнэ үү.

Дээрх орлуулалтууд (жишээлбэл, иш татсан хэлхээний дотор) тэдгээрийг илэрхийллийн зааврын дагуу гүйцэтгэдэг. Гэхдээ илэрхийлэх процессорыг дуудахаас өмнө нэмэлт түвшний орлуулалтыг тушаал коммандаар гүйцэтгэсэн байж болох юм. Доор тайлбарласанчлан хаалтан дахь илэрхийлэлийг агуулах нь агуулгын гүйцэтгэлийг орлуулах тушаалаас урьдчилан сэргийлэх явдал юм.

Энгийн илэрхийллийн зарим жишээн дээр бол хувьсагч нь 3 утгатай бөгөөд хувьсагч b нь 6 утгатай байна. Дараа нь мөр бүрийн зүүн талд байгаа тушаал нь мөрийн баруун талд утга өгнө:

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

Операторууд

Хүчинтэй операторуудыг доор жагсаав.

- + ~!

Unary minus, unary plus, bit-wise NOT, логик NOT. Эдгээр алгоритмийн алгоритмууд нь алгоритмуудад хамааралгүй, мөн бага утга нь зөвхөн бүхэл тоон утгаар хэрэглэгдэж болно.

* /%

Үржих, хуваах, үлдэгдэл. Эдгээр алгоритмууд нь алганы гүйлгээнд ашиглагдахгүй бөгөөд үлдсэнийг зөвхөн бүхэл тоон утгаар хэрэглэж болно. Үлдсэн хэсэг нь хуваагчтай ижил байх ба хуваагчаас бага үнэмлэхүй утгатай байна.

+ -

Нэмэх болон хасах. Аль ч тоон үйлдлийн хувьд хүчинтэй.

<< >>

Зүүн ба баруун шилжилт. Зөвхөн бүхэл тоонуудад үйлчилнэ. Зөв шилжилт нь тэмдэгтийн битийг тараахад үргэлж байдаг.

<> <=> =

Бутан нь бага, их, бага буюу тэнцүү, их буюу тэнцүү. 0 бол нөхцөл байдал үнэн бол оператор бүр 1 байна. Эдгээр операторуудыг мөрүүд болон тоон алгоритмуудад хэрэглэж болох бөгөөд энэ тохиолдолд мөрийн харьцуулалтыг ашиглаж болно.

==! =

Бутан нь тэнцүү бөгөөд тэнцүү биш. Оператор бүр нь тэг / нэг үр дүнг гаргадаг. Бүх үйлдлийн төрлүүдэд хүчинтэй байна.

&

Ай Би бас. Зөвхөн бүхэл тоонуудад үйлчилнэ.

^

Онцгой онцгой OR. Зөвхөн бүхэл тоонуудад үйлчилнэ.

|

Огтхон ч үгүй. Зөвхөн бүхэл тоонуудад үйлчилнэ.

&&

Логик нь. Аль аль нь үйлдэл нь тэг биш бол 1 үр дүнг үйлдвэрлэх, тэгэхгүй бол 0. Зөвхөн boolean болон тоон (бүхэл тоо эсвэл хөвөгч цэг) үйлдлүүд.

| |

Логик OR. Хэрэв хоёр үйлдэл нь тэг бол, үр дүнг 0 болгоно. Зөвхөн boolean болон тоон (бүхэл тоо эсвэл хөвөгч цэг) үйлдлүүд.

x ? y : z

Хэрэв тэгвэл C-тэй адил. Хэрэв x нь тэг биш бол үнэлэх юм бол үр дүн нь y- ийн утга юм. Үгүй бол үр дүн нь z- ийн утга юм. X operand нь тоон утгатай байх ёстой.

Оператор бүрийн гаргасан үр дүнгийн талаар дэлгэрэнгүй мэдээллийг С гарын авлагыг үзнэ үү. Бүх хоёртын операторын бүлгүүд зүүнээс баруун тийшээ яг ижил түвшний түвшинд байна. Жишээ нь, тушаал

expr 4 * 2 <7

0 буцаана.

&& , || , мөн : операторууд "C залхуу үнэлгээ" -тэй адил C-тэй адил үйлдэлүүдийг үр дүнг тодорхойлох шаардлагагүй эсэхийг үнэлдэггүй гэсэн үг юм. Жишээлбэл, тушаалын дагуу

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

зөвхөн [a] эсвэл [b] -ын нэг нь $ v -ийн үнээс хамааран үнэлэгдэнэ. Гэхдээ энэ нь бүхэлдээ хаалтанд хаалттай байх нь үнэн юм. Өөрөөр хэлбэл Tcl parser expr тушаалын өмнө ажиллуулахаасаа өмнө [a] болон [b] хоёуланг нь үнэлэх болно.

Математикийн функцүүд

Tcl дараах математикийн функцуудыг илэрхийлэхдээ дэмждэг:

abs cosh log sqrt acos double log10 srand asin exp pow tan atan floor rand tanh atan2 fmod дугуй ceil hypot sin sin int sinh

abs ( arg )

Arg аргын үнэмлэхүй утга буцаана. Arg нь бүхэл тоо эсвэл хөвөгч цэг байж болох бөгөөд үр дүн нь ижил хэлбэрээр буцаагдана.

acos (arg )

[0, pi] радиануудын хүрээнд аркийн кариныг буцаана. Арг нь [1, 1] мужид байх ёстой.

asin (arg )

Аргуудын arc sine-ыг буцаана [-pi / 2, pi / 2] радианууд. Арг нь [1, 1] мужид байх ёстой.

atan ( arg )

Аргуудын нумын нумыг буцаадаг [-pi / 2, pi / 2] радиануудаас буцаана.

atan2 ( x, y )

Y / x -ийн нумын нумыг буцаадаг [-pi, pi] радианууд. x ба y нь хоёулаа 0 байж болохгүй.

ceil ( arg )

Хамгийн бага бүхэл утгыг араас багагүй буцаана.

cos ( arg )

Румынд хэмжсэн аргуудын косинусыг буцаана.

cosh ( arg )

Аргоны hyperbolic cosine-г буцаана. Хэрэв үр дүн нь халихад хүргэж байвал алдаа буцаагдах болно.

давхар ( аргумент )

Хэрэв arg нь floating value бол ар argгийг буцаана, өөрөөр хэлбэл хөрвүүлэгдсэн утгыг хөврүүлж flor хөрвүүлдэг.

exp ( arg )

Арг экспоненциалыг e ** arg гэж тодорхойлсон. Хэрэв үр дүн нь халихад хүргэж байвал алдаа буцаагдах болно.

давхар ( arg )

Arg- ээс ихгүй хамгийн том салшгүй утга буцаах.

fmod ( x, y )

X -ээр y- ийн хуваалтын хөвөх цэгээс үлдсэн хэсгийг буцаана. Хэрэв y 0 бол алдаа буцаагдах болно.

hypot ( x, y )

Гурвалжны гурвалжны гипотенузын урт ( x * x + y * y ).

int ( arg )

Арг нь бүхэл утгыг илэрхийлж байвал ар argгийг буцаана, өөрөөр хэлбэл arg аррумыг бүхэлд нь truncation болгон хувиргаж хөрвүүлсэн утгыг буцаана.

log ( arg )

Аргуудын байгалийн логарифмыг буцаана. Арг нь эерэг утгатай байх ёстой.

log10 ( arg )

Аргуудын үндсэн 10 логарифмыг буцаана. Арг нь эерэг утгатай байх ёстой.

pow ( x, y )

X-ийн өсгөсөн x утгыг олно. Хэрэв x нь сөрөг байгаа бол y нь бүхэл тоон утга байх ёстой.

rand ()

0-ээс бага хөвөгч цэгийн дугаарыг буцаана, математикийн нөхцөлд [0,1] мужийг буцаана. Үр нь машин доторх цаг эсвэл гараар srand функцээр гар аргаар тохируулж болно.

дугуй ( arg )

Арг нь бүхэл утгыг илэрхийлж байвал ар argгийг буцаана, өөрөөр хэлбэл хөрвүүлэгдсэн утгыг буцаах ба ар ар болгоно.

sin ( arg )

Румынд хэмжсэн аргуудын синусыг буцаана.

sinh ( arg )

Аргуудын гипертик синусыг буцаана. Хэрэв үр дүн нь халихад хүргэж байвал алдаа буцаагдах болно.

sqrt ( arg )

Arg арлын квадрат язгуурыг буцаана. Арг нь сөрөг биш байх ёстой.

srand (arg )

Аргумент нь бүхэл тоо байх ёстой бөгөөд санамсаргүй тоон генераторын үрийг анхны байдалд нь оруулж байна. Энэ үрээс эхний санамсаргүй дугаарыг буцаана. Орчуулагч бүр өөрийн үртэй байна.

tan ( arg )

Румынд хэмжсэн аргуудын тангенийг буцаана.

tanh ( arg )

Аргоны гиперсийн тангенийг буцаана.

Эдгээр урьдчилан тодорхойлсон функцуудаас гадна програмууд Tcl_CreateMathFunc () ашиглан нэмэлт функцийг тодорхойлж болно.

Төрөл, урсгал, нарийн байдал

Бүхэл тоонуудыг тооцоолох бүхэл тоонууд нь C төрлийн уртаар хийгддэг бөгөөд хөвөгч цэгийг хамарсан дотоод тооцооллыг C төрлийн давхаргаар хийдэг . Гүүрийг хөвөгч цэг рүү хувиргах үед илүүдэл халилт илэрсэн ба Tcl алдаа гарна. Бөглөрөөс бүхэл хувиргалт хийхэд, overflow илрүүлэх нь орон нутгийн C сан дахь зарим дэг журмын байдлаас шалтгаалах тул найдваргүй гэж тооцогдох ёстой. Аль ч тохиолдолд бүхэл бүтэн халих ба халих урсац нь завсрын үр дүнг найдвартайд тооцдоггүй. Floating point-аар халих болон underflow нь тоног төхөөрөмжийн дэмждэг түвшинд илэрдэг бөгөөд ерөнхийдөө найдвартай байдаг.

Дотоод дүрслэл хоорондын бүхэл тоо, хөвөгч цэг, мөрийн үйлдлүүдийн хооронд хөрвүүлэлтийг шаардлагатай үед автоматаар хийдэг. Арифметик тооцооллын хувьд бүхэл тоо нь хэд хэдэн хөвөгч цэгийг нэвтрүүлэх хүртэл ашиглагддаг ба дараа нь хөвөгч цэгийг ашигладаг. Жишээлбэл,

expr 5/4

буцаах 1, байхад

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

хоёулаа 1.25 буцаж ирдэг. Floating-point values ​​нь үргэлж "буцаах" утгатай байдаг . '' эсвэл ' e ' нь бүхэл тоон утгыг харуулахгүй. Жишээлбэл,

expr 20.0 / 5.0

буцаах 4.0 , биш 4 .

Стринг үйл ажиллагаа

Үзүүлэлтийн утгыг харьцуулах операторуудын үйлдэл болгон ашиглаж болох боловч илэрхийллийн үнэлгээ нь чадах бүхэл эсвэл хөвөгч цэг болох харьцуулалт хийхийг оролддог. Харьцуулалтын үйлдэлүүдийн нэг нь мөр бөгөөд нөгөө нь тоон утгатай бол тоон утга нь C Spintf форматыг бүхэл тоо % d ба хөвөх цэгүүдийн % g утгыг ашиглан тэмдэгт мөр рүү буцааж хөрвүүлнэ . Жишээ нь, тушаалууд

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

Эхний харьцаа нь бүхэл тоон харьцуулалтыг ашиглан хийгддэг бөгөөд хоёр дахь нь 18-р мөр рүү хөрвүүлсний дараа мөрийн харьцуулалтыг ашиглан хийгддэг. Tcl-ийн үнэ цэнийг аль болох тоогоор харьцах хандлагатай байдаг учраас мөрүүдийг харьцуулалт хийхийг хүсч байгаа бөгөөд operперын утгыг дурын дурын байж болох үед == гэх мэт операторуудыг ашиглах нь тийм ч сайн санаа биш юм. Эдгээр тохиолдлуудад string тушаалыг ашиглах нь дээр юм.

Гүйцэтгэлийн асуудлууд

Хамгийн сайн хурдтай хадгалах хамгийн бага хурдтай хадгалах хаалтыг илэрхийлнэ. Энэ нь Tcl bytecode хөрвүүлэгчийг хамгийн сайн кодыг үүсгэхийг зөвшөөрдөг.

Дээр дурдсанчлан илэрхийллүүд хоёр удаа солигдсон: нэг удаа Tcl parser болон expr тушаалын нэгээр илэрхийлсэн илэрхийллүүд. Жишээ нь, тушаалууд

3 $ b $ $ a + 2 $ expr $ b * 4 гэж тохируул

return нь 11 биш, 4-ийн олонлог биш. Учир нь Tcl parser нь $ a + 2 $ b хувьсагчийн оронд $ a + 2- г орлуулдаг бөгөөд expr тушаал $ a + 2 * 4 илэрхийлэлд үнэлгээ өгнө.

Ихэнх илэрхийллүүд нь хоёр дахь удаагийн орлуулалт шаарддаггүй. Тэдгээр хаалтууд хаалттай эсвэл үгүй ​​бол тэдгээрийн хувьсах хэмжигдэхүүн болон тушаалын орлуулалт нь өөрсдийгөө орлуулахыг шаарддаггүй тоонууд буюу тэмдэгтүүдийг гаргадаг. Гэсэн хэдий ч цөөн тоогоор илэрхийлэгдээгүй илэрхийллүүд нь хоёр тойргийн орлуулалт шаардлагатай тул байткод хөрвүүлэгч нь энэ нөхцлийг зохицуулах нэмэлт зааварчилгааг гаргадаг. Хамгийн үнэтэй код нь тушаалаар орлуулагддаггүй илэрхийллүүдэд шаардлагатай байдаг. Эдгээр илэрхийллүүд нь илэрхийлэгдэх бүрт шинээр код үүсгэж хэрэгжинэ.

Түлхүүр үг

арифметик, бюллен , харьцуулалт, илэрхийлэл, уян хатан харьцуулалт

Чухал: Тушаалын командыг ашиглана ( % man ) ашиглана.