Atama
Kullanımları hemen belli olmasa da aritmetik ifadeler atama yapabilir. Farklı bir bağlamda olsa da birçok kez atama gerçekleştirdik. Bir değişkene her değer verdiğimizde, atama gerçekleştiriyoruz. Bunu aritmetik ifadeler içinde de yapabiliriz:
[ben@linuxbox ~]$ foo=
[ben@linuxbox ~]$ yankı $foo
[ben@linuxbox ~]$ if (( foo = 5 )); ardından echo "Doğrudur."; fi
Bu doğru.
[ben@linuxbox ~]$ yankı $foo
5
[ben@linuxbox ~]$ foo=
[ben@linuxbox ~]$ yankı $foo
[ben@linuxbox ~]$ if (( foo = 5 )); ardından echo "Doğrudur."; fi
Bu doğru.
[ben@linuxbox ~]$ yankı $foo
5
Yukarıdaki örnekte ilk olarak değişkene boş bir değer atıyoruz. foo ve gerçekten boş olduğunu doğrulayın. Ardından, bir gerçekleştiriyoruz if bileşik komut ile (( fo = 5
)). Bu işlem iki ilginç şey yapar: 1) değişkene 5 değerini atar.
foo ve 2) foo'ya sıfır olmayan bir değer atandığı için true olarak değerlendirilir.
![]()
Not: kelimenin tam anlamını hatırlamak önemlidir. = yukarıdaki ifadede. Bir tek = atama yapar. fo = 5 "yap" diyor foo 5'e eşit" iken == denkliğini değerlendirir. fo == 5 "yapıyor foo eşit 5?” Bu, birçok programlama dilinde ortak bir özelliktir. Kabukta, bu biraz kafa karıştırıcı olabilir çünkü test komut tek bir kabul eder = dizi denkliği için Daha modern olanı kullanmak için başka bir neden [[]] ve (( )) yerine bileşik komutlar test.
![]()
Ek olarak, =, kabuk ayrıca bazı çok faydalı atamaları gerçekleştiren notasyonlar da sağlar:
Tablo 34-4: Atama Operatörleri
Notasyon Açıklama
Notasyon Açıklama
![]()
parametre = değer Basit görev. atar değer için parametre.
![]()
parametre += değer Ek. Eşittir parametre = parametre +
değeri.
![]()
parametre -= değer Çıkarma. Eşittir parametre = parametre -
değeri.
![]()
parametre *= değer Çarpma işlemi. Eşittir parametre = parametre
* değeri.
![]()
parametre /= değer Tamsayı bölümü. Eşittir parametre =
parametre değeri.
![]()
parametre %= değer Modül. Eşittir parametre = parametre %
değeri.
![]()
parametre++ Değişken artış sonrası. Eşittir parametre =
parametre + 1 (ancak aşağıdaki tartışmaya bakın).
![]()
parametre–– Değişken sonrası azalma. Eşittir parametre =
parametre − 1.
![]()
++parametre Değişken ön artış. Eşittir parametre =
parametre + 1.
![]()
--parametre Değişken ön azalma. Eşittir parametre =
parametre − 1.
![]()
Bu atama operatörleri, birçok yaygın aritmetik görev için uygun bir kısayol sağlar. Özel ilgi çekici olan artış (++) ve eksiltme (-) parametrelerinin değerini birer birer artıran veya azaltan operatörler. Bu gösterim stili C programlama dilinden alınmıştır ve aşağıdakiler de dahil olmak üzere bir dizi başka programlama diline dahil edilmiştir. darbe.
Operatörler, bir parametrenin önünde veya sonunda görünebilir. Her ikisi de parametreyi birer birer artırırken veya azaltırken, iki yerleşimin ince bir farkı vardır. Parametrenin önüne yerleştirilirse, parametre döndürülmeden önce parametre artırılır (veya azaltılır). Daha sonra yerleştirilirse işlem yapılır. sonra parametre döndürülür. Bu oldukça garip, ancak amaçlanan davranış. İşte bir gösteri:
[ben@linuxbox ~]$ foo=1 [ben@linuxbox ~]$ yankı $((foo++)) 1
[ben@linuxbox ~]$ yankı $foo
[ben@linuxbox ~]$ foo=1 [ben@linuxbox ~]$ yankı $((foo++)) 1
[ben@linuxbox ~]$ yankı $foo
2
2
Değişkene bir değerini atarsak foo ve ardından ile artırın ++ parametre adından sonra yerleştirilen operatör, foo bir değeri ile döndürülür. Ancak değişkenin değerine ikinci kez bakarsak artan değeri görürüz. yerleştirirsek ++ operatörü parametrenin önüne koyarsak, daha çok beklenen davranışı elde ederiz:
[ben@linuxbox ~]$ foo=1 [ben@linuxbox ~]$ yankı $((++foo)) 2
[ben@linuxbox ~]$ yankı $foo
2
[ben@linuxbox ~]$ foo=1 [ben@linuxbox ~]$ yankı $((++foo)) 2
[ben@linuxbox ~]$ yankı $foo
2
Çoğu kabuk uygulaması için, operatörün önüne eklemek en faydalısı olacaktır.
++ ve -- operatörleri genellikle döngülerle birlikte kullanılır. Modulo betiğinizi biraz sıkılaştırmak için bazı iyileştirmeler yapacağız:
#! / Bin / bash
# modulo2: ((i = 0; i <= 20; ++ben )); yapmak
Eğer (((ben %5) == 0 )); sonra printf "<%d> " $i
başka
printf "%d" $i
bitti
printf "\ n"
#! / Bin / bash
# modulo2: ((i = 0; i <= 20; ++ben )); yapmak
Eğer (((ben %5) == 0 )); sonra printf "<%d> " $i
başka
printf "%d" $i
bitti
printf "\ n"
Dökümanlar