Linux / Unix Command: expr

Adı

expr - bir ifadə qiymətləndirin

Sinopsis

müəllimi ? arg arg ... ?

Arqumentləri arg (aralarında ayırıcı boşluqlar əlavə edir), nəticəni Tcl ifadəsi kimi qiymətləndirir və dəyəri qaytarır. Tcl ifadələrində icazə verilən operatorlar C ifadələrində icazə verilən operatorların alt kəmiyyətidir və müvafiq C operatorları ilə eyni məna və üstünlüyə malikdirlər. İfadələr demək olar ki, hər zaman ədədi nəticələr verir (tamsaylı və ya üzən nöqtəli dəyərlər). Məsələn, ifadə

expir 8.2 + 6

14.2-ə baxır. Tcl ifadələri operandların ifadəsi ilə C ifadələrindən fərqlənir. Ayrıca, Tcl ifadələri qeyri-sayısal operandları ve dize karşılaştırmalarını destekler.

Operandlar

Tcl ifadəsi operandlar, operatorlar və parantezlərin birləşməsindən ibarətdir. Operatorlar və operatorlar və parantezlər arasında ağ məkan istifadə edilə bilər; ifadənin göstərişləri ilə məhdudlaşdırılır. Mümkün olduqda, operandlar tam dəyərlər kimi şərh edilir. Integer dəyərlər decimal (normal halda), sekizli (işarənin ilk xarakteri 0 ) və ya onaltılıq (işarənin ilk iki simvolu 0x ) olduqda göstərilə bilər. Əgər bir operand yuxarıda göstərilən tamsayı formatlarından birinə malik deyilsə, mümkündürsə, o, bir floating-point sayı kimi qəbul edilir. ANSI-uyğun C kompilyatoru tərəfindən qəbul edilən hər hansı bir şəkildə üzən nöqtə nömrələri müəyyən edilə bilər (əksər hallarda f , F , lL əlavələri icazə verilməyəcəkdir). Məsələn, aşağıdakılar hamısı etibarlı üzən nöqtələrdir: 2.1, 3., 6e4, 7.91e + 16. Heç bir sayısal şərh mümkün deyilsə, bir operand bir simli olaraq qalır (və yalnız məhdud bir operator dəsti tətbiq edilə bilər).

Əməliyyatlar aşağıdakı yollardan birində göstərilə bilər:

[1]

Nümerik dəyər olaraq, tam və ya üzən nöqtə.

[2]

Tcl dəyişən kimi, standart $ notation istifadə. Değişkenin dəyəri operand olaraq istifadə olunur.

[3]

İki tirnoqlı bir simli olaraq. İfadənin ayrıştırıcısı tırtıllar arasında məlumatlar üzərində terslik, dəyişən və komanda əvəzlərini yerinə yetirir və nəticəni operand kimi istifadə edir

[4]

Aşırmalarda qoşulan bir simli olaraq. Açıq brace və uyğun yaxın brace arasındakı simvollar heç bir dəyişiklik olmadan operand kimi istifadə olunacaq.

[5]

Tcl əmri olaraq mötərizələrə əlavə olunur. Komanda yerinə yetiriləcək və nəticəsi operand kimi istifadə ediləcək.

[6]

Riyazi funksiyası olan argumentləri günah kimi ($ x) işləyənlər üçün yuxarıda göstərilən formalardan birinə malikdir. Aşağıdakıları müəyyən edilmiş funksiyalar siyahısına baxın.

Əvəzedicilər yuxarıda meydana gəldiyi yerlərdə (məsələn, alınmış simlər içərisində) ifadənin göstərişləri ilə həyata keçirilir. Bununla yanaşı, ifadə prosessoru çağrılmadan əvvəl komanda ayrıştırıcısı tərəfindən əvəzetmənin əlavə bir qatı tətbiq oluna bilər. Aşağıda müzakirə edildiyi kimi, komanda ayrıştırıcısının məzmunda əvəzlər yerinə yetirməməsini maneə törətmək üçün ifadələrə əlavə etmək yaxşı olar.

Sadə ifadələrin bəzi nümunələrinə görə, dəyişən a a 3-ə, dəyişən b- də isə 6- a malik olacağını güman etsək, aşağıdakı xətlərin hər birinin sol tərəfindəki əmr xəttin sağ tərəfində olan dəyərini verəcəkdir:

expir 3.1 + $ a6.1 expr 2 + "$ a. $ b" 5,6 expr 4 * [llength "6 2"] 8 expr {{sözü bir} <"söz $ a"} 0

Operatorlar

Müvafiq operatorlar aşağıda sıralanır, prioritet sırası azalır:

- + ~!

Unary mənfi, unary plus, bit-müdrik, məntiqi DEYİL. Bu operandlardan heç biri string operatorlarına tətbiq oluna bilməz və bitmik NOT yalnız tamsayılara tətbiq edilə bilməz.

* /%

Çarpın, bölün, qalan. Bu operandlardan heç biri string operandlara tətbiq edilə bilməz və qalıq yalnız tamsayılara tətbiq edilə bilər. Qalanın həmişə divisor və divisor daha kiçik bir mütləq dəyər eyni göstərici olacaq.

+ -

Əlavə edin və çıxarın. Hər hansı sayısal operandlar üçün etibarlıdır.

<< >>

Sol və sağ keçid. Yalnız tam ədədlər üçün etibarlıdır. Sağ köçürmə həmişə işarənin bitsini yayır.

<> <=> =

Boolean daha az, daha böyük, daha az və ya bərabər və daha çox və ya bərabərdir. Vəziyyət doğru olduqda, hər bir operator 1-i istehsal edir, əks halda 0. Bu operatorlar simli müqayisədə istifadə edildikdə strings və numeric operands tətbiq edilə bilər.

==! =

Boolean bərabər və bərabər deyil. Hər bir operator sıfır / bir nəticə çıxarır. Bütün operand tipləri üçün etibarlıdır.

BİDDİ VƏ. Yalnız tam ədədlər üçün etibarlıdır.

^

Bit-müdrik eksklüziv VƏ. Yalnız tam ədədlər üçün etibarlıdır.

|

Bit-ağıllı VƏ. Yalnız tam ədədlər üçün etibarlıdır.

&&

Məntiqli və. Əksər operatorlar sıfır deyilsə, başqa bir halda 1 nəticə verir. Yalnız boolean və ədədi (tamsaylı və ya üzən nöqtə) operanda üçün etibarlıdır.

||

Məntiqi YA. Əksər operatorlar sıfır, əks halda 1 isə 0 nəticə verir. Yalnız boolean və ədədi (tamsaylı və ya üzən nöqtə) operanda üçün etibarlıdır.

x ? y : z

If-then-else, C'de olduğu kimi. X sıfır olmayan halda qiymətləndirirsə, nəticə y dəyəridir. Əks halda nəticə z dəyəridir. X operatorun ədədi dəyəri olmalıdır.

Hər operator tərəfindən çıxarılan nəticələr haqqında daha ətraflı məlumat üçün C təlimatını nəzərdən keçirin. Bütün ikili operatorlar qrupu soldan sağa eyni üstünlük səviyyəsindədir. Məsələn, əmr

expr 4 * 2 <7

0 qaytarır.

The && , || , və : operatorlar, C-də olduğu kimi, "tənbəl qiymətləndirmə" var, yəni nəticələrin müəyyənləşdirilməsinə ehtiyac olmadıqda operandlar qiymətləndirilmir. Məsələn, komanda

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

[a] və ya [b] 'nin yalnız biri $ v dəyərinə əsasən qiymətləndiriləcəkdir. Bununla yanaşı, bütün ifadənin aşırmalara əlavə olunduğu təqdirdə, bu yalnız doğrudur; əks halda, Tcl parser, expr komutunu çağırmadan əvvəl həm [a][b] qiymətləndirəcəkdir.

Math funksiyaları

Tcl ifadələrdə aşağıdakı riyazi funksiyaları dəstəkləyir:

abs cosh log sqrt acos double log10 srand asin exp pow tan atan mərtəbə rand tanh atan2 fmod dəyirmi cip hipot sin cos int sinh

abs ( arg )

Arqın mütləq dəyərini qaytarır. Arg tam ya da üzən nöqtə ola bilər və nəticə eyni forma ilə qaytarılır.

acos ( arg )

Arg [0, pi] radians arc kosinüsünü qaytarır. Arg [-1,1] aralığında olmalıdır.

asin ( arg )

Arc sinüsini [-pi / 2, pi / 2] radians aralığında qaytarır. Arg [-1,1] aralığında olmalıdır.

atan ( arg )

Arg -nin arg-tangentini, [-pi / 2, pi / 2] radyanları aralığında qaytarır.

atan2 ( x, y )

Y / x- nin yay tangentini, [-pi, pi] radians aralığında qaytarır. xy hər ikisi də ola bilməz.

tavan ( arg )

Ən kiçik tam dəyərini arg'den az qaytarır.

cos ( arg )

Radianlarla ölçülmüş arginin kosinüsünü qaytarır.

cosh ( arg )

Arg hiperbolik kosinüsünü qaytarır. Nəticədə daşma səbəb olarsa, bir səhv qaytarılır.

ikili ( arg )

Arg , dəyişən bir dəyərdirsə, arg'i qaytarır, əks halda arg dəyişən çevirir və çevrilən dəyəri qaytarır.

exp ( arg )

E ** arg kimi təyin olunan arg ardıcıllığını qaytarır. Nəticədə daşma səbəb olarsa, bir səhv qaytarılır.

mərtəbə ( arg )

Arqından böyük olmayan ən böyük integral dəyərini qaytarır.

fmod ( x, y )

X- nin bölüşdürülməsinin üzən nöqtə qalıqlarını qaytarır. Y 0 ise, bir səhv qaytarılır.

hipot ( x, y )

Sağ açılı üçbucağın ( x * x + y * y ) hypotenuse uzunluğunu hesablayır.

int ( arg )

Əgər arg hərf bir dəyərsə , arg'i qaytarır, əks halda arqumenti tam sayına çevirir və çevrilən dəyəri qaytarır.

giriş ( arg )

Arqın təbii logarithmini qaytarır. Arg , müsbət bir dəyər olmalıdır.

log10 ( arg )

Arqın əsas 10 logarithmini qaytarır. Arg , müsbət bir dəyər olmalıdır.

pow ( x, y )

Yüksəlmiş xin gücünü y hesablayır. X mənfi olduqda, y tam dəyər olmalıdır.

rand ()

Sıfırdan birinə ya da matematik baxımından [0,1] aralığa qədər bir üzən nöqtə sayını verir. Toxum maşının daxili saatından gəlir və srand funksiyası ilə əl ilə təyin edilə bilər.

dəyirmi ( arg )

Arqs tam bir dəyərdirsə, arg'i qaytarır, əks halda yuvarlaqlaşdırma ilə tam argoya çevirir və çevrilən dəyəri qaytarır.

sin ( arg )

Radianlarla ölçülmüş arginin sinüsünü qaytarır.

sinh ( arg )

Arg hiperbolik sinüsünü qaytarır. Nəticədə daşma səbəb olarsa, bir səhv qaytarılır.

sqrt ( arg )

Arqın kvadrat kökünə dönür . Arg qeyri-mənfi olmalıdır.

srand (arg )

Bir tamsayı olması lazım olan arg , təsadüfi saylı generator üçün toxumu yenidən qurmaq üçün istifadə olunur. Bu toxumu ilk təsadüfi sayını qaytarır. Hər bir tərcüməçinin öz toxumu var.

tan ( arg )

Radianlarla ölçülmüş arginin tangentini qaytarır.

tanh ( arg )

Arqadın hiperbolik tangentini qaytarır.

Bu əvvəlcədən təyin edilmiş funksiyalara əlavə olaraq tətbiqlər Tcl_CreateMathFunc () funksiyasını istifadə edərək əlavə funksiyaları müəyyən edə bilər.

Növləri, daşqın və dəqiqlik

Tam ədədləri əhatə edən bütün daxili hesablamalar C tipi uzunluqda aparılır və üzən nöqtəni əhatə edən bütün daxili hesablamalar C tipli cütləşmə ilə aparılır. Bir simli üzən nöqtəyə çevirərkən, yuxarıdakı daşqın aşkarlanır və bir Tcl səhv olur. Dize olan tamsayıya çevrilmək üçün daşqının aşkarlanması yerli C kitabxanasında bəzi rutinlərin davranışından asılıdır, ona görə etibarsız sayılmalıdır. Hər halda, tam daşma və daşqın ümumiyyətlə ara nəticələr üçün etibarlı bir şəkildə aşkar edilmir. Üzən nöqtələr daşqın və daşqın hardware ilə dəstəklənən dərəcədə təsbit edilir, bu olduqca etibarlıdır.

Daxili nümayəndəliklər arasında tamsayı, üzən nöqtə və simli operandlar üçün çevrilmə lazım olduqda avtomatik olaraq həyata keçirilir. Aritmetik hesablamalar üçün tam ədədlər bir qayçı nöqtəsi tətbiq edildikdən sonra istifadə olunur, bundan sonra üzən nöqtə istifadə olunur. Misal üçün,

5/4-ə başa çatdırın

1 qaytarır

expr 5 / 4.0 expr 5 / ([string uzunluğu "abcd"] + 0.0)

hər ikisi də 1.25-ə qayıdır. Üzən nöqtə dəyərləri həmişə `` ilə qaytarılır . '' və ya '' e '' tam dəyərlər kimi görünməyəcək. Misal üçün,

20.0 / 5.0 başa çatdı

4.0 qaytarır, 4 deyil.

String Əməliyyatları

String dəyərləri müqayisə operatorlarının işləyiciləri kimi istifadə oluna bilər, baxmayaraq ki, ifadə qiymətləndiricisi mümkün olduqda tamsayı və ya üzən nöqtə kimi müqayisə etmək üçün çalışır. Bir müqayisənin əmanlarından biri düstur, diğərində sayısal bir dəyər varsa, ədədi operand tamsayılar üçün C sprintf formatı göstəricisi % d və floating-point dəyərlər üçün % g istifadə edərək simvolu geri qaytarılır. Məsələn, əmrlər

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

hər iki qaytarma 1. Birinci müqayisə tam ədədi müqayisəsi ilə aparılır və ikinci operand stringə çevrildikdən sonra dəmir müqayisəsi ilə ikinci aparılır. Tcl'yi dəyərləri mümkün olduğunca müalicə etmək meyli olduğundan, həqiqətən, string = müqayisə etmək istədikdə operatorları istifadə etmək yaxşı bir fikirdir və operatorların dəyərləri özbaşına ola bilər; bu halda simvolu əmrini yerinə yetirmək daha yaxşıdır.

Performans baxımları

Ən yaxşı sürət və ən kiçik saxlama tələbləri üçün aşırma ifadələrini bağlayın. Bu, Tcl bayt derleyicisine ən yaxşı kodu yaratmağa imkan verir.

Yuxarıda qeyd edildiyi kimi ifadələr iki dəfə əvəzlənir: bir dəfə Tcl parser və bir dəfə expr əmri ilə. Məsələn, əmrlər

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

11-ə qayıt, 4-dən çox deyil. Tcl parser əvəzində dəyişən b üçün $ a + 2 əvəz edəcək, sonra expr komandası $ a + 2 * 4 ifadəsini qiymətləndirəcəkdir.

Çox ifadələr ikinci dəyirmi dəyişdirməyi tələb etmir. Onlar ya braces ildə əlavə olunur və ya əgər, onların dəyişən və komanda əvəz özləri əvəz tələb olmayan ədəd və ya strings. Lakin, bir neçə əvəzsiz ifadənin iki dəyişdirmə əvəzinə olması səbəbindən, bayt cədvəli bu vəziyyəti həll etmək üçün əlavə təlimat yaymalıdır. Ən bahalı kod, komanda əvəzlərini ehtiva edən alınmamış ifadələr üçün tələb olunur. Bu ifadələr, ifadənin hər dəfə yerinə yetirilməsi ilə yeni bir kod çıxararaq həyata keçirilməlidir.

Açar sözlər

aritmetik, boolean , müqayisə, ifadə, qeyri-səlis müqayisə

Mühüm: Şəxsi kompüterinizdə bir komanda necə istifadə edildiyini görmək üçün man komutunu ( % man ) istifadə edin.