← man/data_processing
expr — man expr — 80×24
ugur@toprak:~/man/data_processing$man expr
Bölüm 1 Veri İşleme

expr

ifadeyi (expression) değerlendirir

Sözdizimi

     expr expression

Açıklama

expr yardımcı programı, belirtilen ifadeyi değerlendirir ve sonucu standart çıktıya yazar.

Tüm işleçler (operators) ve işlenenler (operands) ayrı bağımsız değişkenler olarak geçirilmelidir. İşleçlerin birçoğu komut yorumlayıcıları için özel anlamlar taşır ve bu nedenle uygun şekilde tırnak içine alınmalıdır. Tüm tam sayı işlenenler 10'luk tabanda yorumlanır ve yalnızca isteğe bağlı bir eksi işareti ile bunu takip eden bir veya daha fazla basamaktan oluşmalıdır.

Aritmetik işlemler, C intmax_t veri türüne (kullanılabilir en büyük işaretli tam sayı türü) uygun bir aralıkta işaretli tam sayı matematiği kullanılarak gerçekleştirilir. Tüm dönüşümler ve işlemler taşma (overflow) olasılığına karşı kontrol edilir. Taşma, standart çıktıda (stdout) bir hata mesajı ve bir hata durumu ile programın sonlandırılmasıyla sonuçlanır.

İşleçler aşağıda öncelik sırasına göre artan şekilde listelenmiştir; hepsi sola birleşmelidir (left-associative). Eşit önceliğe sahip işleçler ‘{’ ve ‘}’ sembolleri içinde gruplandırılmıştır.

expr1 | expr2 Eğer expr1 boş bir karakter dizisi veya sıfır değilse expr1'in sonucunu döndürür; aksi takdirde, boş bir karakter dizisi değilse expr2'nin sonucunu döndürür; aksi takdirde sıfır döndürür.

expr1 & expr2 İfadelerin hiçbiri boş bir karakter dizisine veya sıfıra eşitlenmiyorsa expr1'in sonucunu döndürür; aksi takdirde sıfır döndürür.

expr1 {=, >, >=, <, <=, !=} expr2 Her iki bağımsız değişken de tam sayıysa tam sayı karşılaştırma sonuçlarını döndürür; aksi takdirde, yerel ayarlara özgü sıralama dizisini kullanarak karakter dizisi karşılaştırma sonuçlarını döndürür. Belirtilen ilişki doğruysa her bir karşılaştırmanın sonucu 1, ilişki yanlışsa 0'dır.

expr1 {+, -} expr2 Tam sayı değerli bağımsız değişkenlerin toplama veya çıkarma sonuçlarını döndürür.

expr1 {*, /, %} expr2 Tam sayı değerli bağımsız değişkenlerin çarpma, tam sayı bölme veya kalan (mod) sonuçlarını döndürür.

expr1 : expr2 “:” işleci, expr1'i temel bir düzenli ifade olması gereken expr2 ile eşleştirir. Düzenli ifade, örtük bir “^” ile karakter dizisinin başına çıpalanır.

Eşleşme başarılı olursa ve şablon en az bir düzenli ifade alt ifadesi olan “(...)” içeriyorsa, “\1”e karşılık gelen karakter dizisi döndürülür; aksi takdirde eşleştirme işleci eşleşen karakter sayısını döndürür. Eşleşme başarısız olursa ve şablon bir düzenli ifade alt ifadesi içeriyorsa boş karakter dizisi (null string) döndürülür; aksi takdirde 0 döndürür.

Parantezler, alışılagelmiş şekilde gruplandırma amacıyla kullanılır.

expr yardımcı programı, işleç olabilecek bağımsız değişkenler ile işlenen olabilecek bağımsız değişkenler arasında sözcüksel (lexical) bir ayrım yapmaz. Sözcüksel olarak bir işleç ile aynı olan bir işlenen, bir sözdizimi hatası olarak kabul edilecektir. Bu sorunu aşmak için aşağıdaki örneklere bakın.

expr komutunun sözdizimi genel olarak tarihidir ve kullanışsızdır. Yeni uygulamaların expr yerine kabuk aritmetiğini kullanması önerilir.

Çıkış Durumu

expr yardımcı programı aşağıdaki değerlerden biriyle sonlanır: 0 ifade boş bir karakter dizisi veya 0 değildir. 1 ifade boş bir karakter dizisi veya 0'dır. 2 ifade geçersizdir.

Örnekler

     •	 Aşağıdaki örnek (sh(1) sözdiziminde) a değişkenine bir ekler:
	       a=$(expr $a + 1)

     •	 a'nın değeri negatif bir sayı ise bu işlem başarısız olacaktır. a'nın negatif değerlerinin expr komutuna seçenek olarak yorumlanmasını önlemek için ifade yeniden düzenlenebilir:
	       a=$(expr 1 + $a)

     •	 Daha genel olarak, negatif olması muhtemel değerleri parantez içine alın:
	       a=$(expr \( $a \) + 1)

     •	 Kabuk aritmetiği ile kaçış karakterine gerek yoktur:
	       a=$((a + 1))

     •	 Bu örnek, a değişkeninde saklanan bir yol adının dosya adı kısmını yazdırır. a / yolunu temsil edebileceğinden, bölme işleci olarak yorumlanmasını önlemek gerekir. // karakterleri bu belirsizliği giderir.
	       expr "//$a" : '.*/\(.*\)'

     •	 Modern sh(1) sözdiziminde,
	       "${a##*/}"
	 aynı değere genişler.

     Aşağıdaki örnekler a değişkenindeki karakter sayısını çıktı olarak verir. Yine, a bir kısa çizgi ile başlayabileceğinden, bunun expr için bir seçenek olarak yorumlanmasını önlemek gerekir; ayrıca a bir işleç olarak da yorumlanabilir.

     •	 Tüm bunlarla başa çıkmak için karmaşık bir komut gerekir:
	       expr \( "X$a" : ".*" \) - 1

     •	 Modern sh(1) sözdizimi ile bu işlem çok daha kolay yapılabilir:
	       ${#a}
	 gerekli sayıya genişler.

Ayrıca Bakınız

sh(1), test(1)

Standartlar

expr yardımcı programı IEEE Std 1003.1-2008 (“POSIX.1”) standardına uygundur.

Genişletilmiş aritmetik aralık ve taşma kontrolleri, POSIX'in aritmetiğin işaretli long kullanılarak yapılması gereksinimiyle çelişmez; çünkü bunlar yalnızca işaretli long kullanmanın belirsiz davranışa yol açacağı durumlarda sonuçta bir farklılık oluşturur.

POSIX standardına göre, length, substr, index veya match gibi karakter dizisi bağımsız değişkenlerinin kullanılması belirsiz sonuçlar üretir. expr'in bu sürümünde, bu bağımsız değişkenler yalnızca kendi karakter dizisi değerleri olarak ele alınır.

Tarihçe

Bir expr yardımcı programı ilk olarak Programmer's Workbench (PWB/UNIX) sürümünde yer almıştır. Pace Willisson pace@blitz.com tarafından yazılan kamuya açık (public domain) bir expr sürümü 386BSD-0.1 sürümünde yer almıştır.

Yazarlar

Pace Willisson pace@blitz.com tarafından yapılan ilk uygulama, büyük ölçüde J.T. Conklin jtc@FreeBSD.org tarafından yeniden yazılmıştır.

macOS 26.4 5 Ekim 2016 macOS 26.4