Linux/Unix Komutu Hakkında Her Şey: expr
NS ifade için fayda Linux Shell, bağımsız değişkenleri birleştirir ve ardından sonucu bir Tcl ifadesi olarak değerlendirerek değeri standart çıktıya döndürür.
Tcl ifadelerinde izin verilen operatörler, C ifadelerinde izin verilen operatörlerin bir alt kümesidir ve karşılık gelen C operatörleriyle aynı anlama ve önceliğe sahiptirler. İfadeler neredeyse her zaman sayısal sonuçlar ver (tamsayı veya kayan nokta değerleri).

özet
Komut aşağıdaki genel formu alır:
ifade arg1 arg2 ...
işlenenler
Bir Tcl ifadesi, işlenenlerin, işleçlerin ve parantezlerin birleşiminden oluşur. İşlenenler, işleçler ve parantezler arasında beyaz boşluk kullanılabilir; ifadenin talimatları tarafından yoksayılır.
Mümkün olduğunda, işlenenler tamsayı değerleri olarak yorumlanır. Tamsayı değerleri ondalık (normal durum), sekizli (işlenenin ilk karakteri ise 0) veya onaltılık olarak (işlenenin ilk iki karakteri 0x). Bir işlenen yukarıda verilen tam sayı biçimlerinden birine sahip değilse, mümkünse kayan noktalı sayı olarak kabul edilir.
Kayan noktalı sayılar, ANSI uyumlu bir C derleyicisi tarafından kabul edilen herhangi bir yolla belirtilebilir (bunun dışında, F, F, ben, ve L çoğu kurulumda son eklere izin verilmeyecektir). Örneğin, aşağıdakilerin tümü geçerli kayan noktalı sayılardır: 2.1, 3., 6e4, 7.91e+16. Sayısal yorumlama mümkün değilse, o zaman bir işlenen bir dizge olarak bırakılır ve ona yalnızca sınırlı sayıda işleç uygulanabilir.
İşlenenler aşağıdaki yollardan herhangi biriyle belirtilebilir:
- Sayısal bir değer olarak, tamsayı veya kayan nokta.
- Bir Tcl değişkeni olarak, standart kullanılarak $ notasyon. Değişkenin değeri işlenen olarak kullanılacaktır.
- Çift tırnak içine alınmış bir dize olarak. İfade ayrıştırıcısı, tırnak işaretleri arasındaki bilgiler üzerinde ters eğik çizgi, değişken ve komut ikameleri gerçekleştirir ve elde edilen değeri işlenen olarak kullanır.
- Parantez içine alınmış bir dize olarak. Açık ayraç ile eşleşen kapalı ayraç arasındaki karakterler, herhangi bir ikame olmadan işlenen olarak kullanılacaktır.
- Parantez içine alınmış bir Tcl komutu olarak. Komut yürütülecek ve sonucu işlenen olarak kullanılacaktır.
- Argümanları işlenenler için yukarıdaki formlardan herhangi birine sahip olan matematiksel bir fonksiyon olarak, örneğin günah($x).
Yukarıda yer değiştirmeler olduğunda (örneğin, alıntılanan dizeler içinde), bunlar ifadenin talimatlarıyla gerçekleştirilir. Bununla birlikte, ifade işlemcisi çağrılmadan önce komut ayrıştırıcı tarafından ek bir ikame katmanı zaten gerçekleştirilmiş olabilir.
Bazı basit ifade örnekleri için değişkenin a 3 değerine ve değişkene sahip B 6 değerine sahiptir. Ardından, aşağıdaki satırların her birinin sol tarafındaki komut, satırın sağ tarafındaki değeri üretecektir:
ifade 3,1 + 6,1 ABD doları
ifade 2 + "$a.$b"5.6
ifade 4*[l uzunluk "6 2"]8
ifade {{kelime bir} < "kelime $a"}0
operatörler
Geçerli operatörler, azalan öncelik sırasına göre gruplandırılmış şekilde aşağıda listelenmiştir:
- - + ~ !: Birli eksi, birli artı, bit bazında DEĞİL, mantıksal DEĞİL. Bu işlenenlerin hiçbiri dize işlenenlerine uygulanamaz ve bit bazında NOT yalnızca tam sayılara uygulanabilir.
- * / %: Çarpma, bölme, kalan. Bu işlenenlerin hiçbiri dize işlenenlerine uygulanamaz ve kalanlar yalnızca tam sayılara uygulanabilir. Kalan her zaman bölenle aynı işarete ve bölenden daha küçük bir mutlak değere sahip olacaktır.
- + -: Ekleme ve çıkarma. Herhangi bir sayısal işlenen için geçerlidir.
- << >>: Sağa ve sola kaydırma. Yalnızca tamsayı işlenenler için geçerlidir. Sağa kaydırma her zaman işaret bitini yayar.
- < > <= >=: Boole değeri daha az, daha büyük, daha küçük veya eşittir ve daha büyük veya eşittir. Her operatör, koşul doğruysa 1, aksi takdirde 0 üretir. Bu operatörler, sayısal işlenenlerin yanı sıra dizilere de uygulanabilir, bu durumda dizi karşılaştırması kullanılır.
- == !=: Boole eşit ve eşit değil. Her operatör sıfır/bir sonuç üretir. Tüm işlenen türleri için geçerlidir.
- &: Bit düzeyinde VE. Yalnızca tamsayı işlenenler için geçerlidir.
- ^: Bit bazında özel VEYA. Yalnızca tamsayı işlenenler için geçerlidir.
- |: Bit bazında VEYA. Yalnızca tamsayı işlenenler için geçerlidir.
- &&: Mantıksal VE. Her iki işlenen de sıfır değilse 1, aksi takdirde 0 sonuç verir. Yalnızca boole ve sayısal (tamsayılar veya kayan nokta) işlenenler için geçerlidir.
- ||: Mantıksal VEYA. Her iki işlenen de sıfırsa 0, aksi takdirde 1 sonucunu verir. Yalnızca boole ve sayısal (tamsayılar veya kayan nokta) işlenenler için geçerlidir.
- x?y:z: If-then-else, C'deki gibi. Eğer x sıfırdan farklı olarak değerlendirir, ardından sonuç değeridir y. Aksi takdirde, sonuç değeridir z. NS x işlenen sayısal bir değere sahip olmalıdır.
Her operatör tarafından üretilen sonuçlar hakkında daha fazla ayrıntı için C kılavuzuna bakın. Tümü ikili operatörler aynı öncelik düzeyinde soldan sağa gruplandırın. Örneğin, komut.
ifade 4*2 < 7
0 döndürür.
NS &&, ||, ve ?: operatörler, tıpkı C'de olduğu gibi, "tembel değerlendirme"ye sahiptir, bu da, sonucu belirlemek için gerekli değilse işlenenlerin değerlendirilmediği anlamına gelir. Örneğin, emretmek
ifade {$v? [a]: [b]}
sadece biri [a] veya [B] aslında değerine bağlı olarak değerlendirilecektir $v. Ancak, bunun yalnızca ifadenin tamamı parantez içine alınmışsa doğru olduğuna dikkat edin; aksi takdirde, Tcl ayrıştırıcısı her ikisini de değerlendirecektir. [a] ve [B] çağırmadan önce ifade emretmek.
Matematik Fonksiyonları
Tcl, ifadelerde aşağıdaki matematiksel işlevleri destekler:
- karın kasları(argüman): Mutlak değerini döndürür argüman. bağımsız değişken tamsayı veya kayan nokta olabilir ve sonuç aynı biçimde döndürülür.
- acos(argüman): Ark kosinüsünü döndürür argüman, [0,pi] radyan aralığında. bağımsız değişken [-1,1] aralığında olmalıdır.
- de olduğu gibi(argüman): Ark sinüsünü döndürür argüman, [-pi/2,pi/2] radyan aralığında. bağımsız değişken [-1,1] aralığında olmalıdır.
- atan(argüman): Ark tanjantını döndürür argüman, [-pi/2,pi/2] radyan aralığında.
- atan2(x, y): Ark tanjantını döndürür y/x, [-pi, pi] radyan aralığında. x ve y ikisi de 0 olamaz.
- tavan(argüman): En küçük tamsayı değerini döndürür. argüman.
- çünkü(argüman): Kosinüsünü döndürür argüman, radyan cinsinden ölçülür.
- cosh(argüman): Hiperbolik kosinüsünü döndürür argüman. Sonuç taşmaya neden olursa, bir hata döndürülür.
- çift(argüman): Eğer argüman değişken bir değerdir, döner argüman, aksi takdirde dönüştürür argüman yüzer ve dönüştürülen değeri döndürür.
- tecrübe(argüman): Üstel değerini döndürür argüman, e** olarak tanımlandıargüman. Sonuç taşmaya neden olursa, bir hata döndürülür.
- zemin(argüman): Şundan büyük olmayan en büyük integral değerini döndürür argüman.
- fmod(x, y): Bölümün kayan noktalı kalanını döndürür x tarafından y. Eğer y 0 ise bir hata döndürülür.
- hipot(x, y): Bir dik açılı üçgenin hipotenüsünün uzunluğunu hesaplar (x*x+y*y).
- int(argüman): Eğer argüman bir tamsayı değeridir, döner argüman, aksi takdirde dönüştürür argüman kesilerek tamsayıya dönüştürülür ve dönüştürülen değeri döndürür.
- kayıt(argüman): Doğal logaritmasını döndürür argüman. bağımsız değişken pozitif bir değer olmalıdır.
- günlük10(argüman): 10 tabanlı logaritmasını döndürür argüman. bağımsız değişken pozitif bir değer olmalıdır.
- güçx, y): değerini hesaplar x güce yükseltilmiş y. Eğer x negatif, y bir tamsayı değeri olmalıdır.
- rand(): Sıfırdan birden küçük bir kayan noktalı sayıyı veya matematiksel terimlerle [0,1) aralığını döndürür. Tohum, makinenin dahili saatinden gelir veya srand işleviyle manuel olarak ayarlanabilir.
- yuvarlak(argüman): Eğer argüman bir tamsayı değeridir, döner argüman, aksi takdirde dönüştürür argüman yuvarlayarak tamsayıya çevirir ve dönüştürülen değeri döndürür.
- günah(argüman): sinüsünü döndürür argüman, radyan cinsinden ölçülür.
- günah(argüman): Hiperbolik sinüsünü döndürür argüman. Sonuç taşmaya neden olursa, bir hata döndürülür.
- kare(argüman): Karekökünü döndürür argüman. bağımsız değişken negatif olmayan olmalıdır.
- srand(argüman): NS argümanbir tamsayı olması gereken, rastgele sayı üretecinin tohumunu sıfırlamak için kullanılır. Bu tohumdan ilk rastgele sayıyı döndürür. Her tercümanın kendi tohumu vardır.
- ten rengi(argüman): tanjantını döndürür argüman, radyan cinsinden ölçülür.
- tanh(argüman): Hiperbolik tanjantını döndürür argüman.
Bu önceden tanımlanmış işlevlere ek olarak, uygulamalar aşağıdakileri kullanarak ek işlevler tanımlayabilir: Tcl_CreateMathFunc().
Türler, Taşma ve Hassasiyet
Tam sayıları içeren tüm dahili hesaplamalar C tipi ile yapılır. uzunve kayan nokta içeren tüm dahili hesaplamalar C tipi ile yapılır çift. Bir dizgiyi kayan noktaya dönüştürürken, üs taşması algılanır ve bir Tcl hatasıyla sonuçlanır. Dizeden tamsayıya dönüştürme için, taşmanın tespiti yerel C kitaplığındaki bazı rutinlerin davranışına bağlıdır, bu nedenle güvenilmez olarak kabul edilmelidir. Her durumda, tamsayı taşması ve taşması genellikle ara sonuçlar için güvenilir bir şekilde algılanmaz. Kayan nokta taşması ve taşması, genellikle oldukça güvenilir olan donanım tarafından desteklenen dereceye kadar algılanır.
Tamsayı, kayan nokta ve dize işlenenleri için dahili temsiller arasında dönüştürme, gerektiğinde otomatik olarak yapılır. Aritmetik hesaplamalar için, bir kayan noktalı sayı girilene kadar tamsayılar kullanılır, ardından kayan nokta kullanılır. Örneğin,
ifade 5 / 4
1 döndürür.
ifade 5 / 4.0
ifade 5 / ( [dize uzunluğu "abcd"] + 0.0 )
her ikisi de 1.25 döndürür. Kayan nokta değerleri her zaman bir `` ile döndürülür.'' veya bir e böylece tamsayı değerleri gibi görünmeyecekler. Örneğin,
ifade 20.0/5.0
İadeler 4.0, Olumsuz 4.
Dizi İşlemleri
İfade değerlendirici mümkün olduğunda tamsayı veya kayan nokta olarak karşılaştırmalar yapmaya çalışsa da, dize değerleri karşılaştırma işleçlerinin işlenenleri olarak kullanılabilir. Bir karşılaştırmanın işlenenlerinden biri bir dize ise ve diğerinin sayısal bir değeri varsa, sayısal işlenen C kullanılarak tekrar bir dizeye dönüştürülür. sprintf biçim belirteci %NS tamsayılar için ve %G kayan noktalı değerler için. Örneğin, komutlar:
ifade {"0x03" > "2"}
ifade {"0y" < "0x12"}
ikisi de döner 1. İlk karşılaştırma tamsayı karşılaştırması kullanılarak yapılır ve ikincisi, ikinci işlenen dizgeye dönüştürüldükten sonra dizgi karşılaştırması kullanılarak yapılır. 18. Tcl'nin değerleri mümkün olduğunda sayı olarak ele alma eğiliminden dolayı, aşağıdaki gibi operatörleri kullanmak genellikle iyi bir fikir değildir. == dize karşılaştırmasını gerçekten istediğinizde ve işlenenlerin değerleri keyfi olabilir; bu durumlarda kullanmak daha iyidir sicim yerine komut verin.