Birkaç aritmetik ile ilgili komut, Dash, POSIX kabuğu, sh, Artış


17

Bir değişkeni öncesi / sonrası artırırken POSIX Kabuğunda bu iki örnek arasındaki fark nedir? Aynı sonuçlara sahip olacaklar gibi görünüyorlar, ancak farklı şekilde mi kullanılacaklar? Ne zaman diğerini tercih edersin?

X=$((X+1))

: $((X=X+1))

Yanıtlar:


18

İlk örneğinizde, $((X+1))X + 1 ifadesini değerlendirir ve sonuca genişler, bu da değişkene atanır.

İkinci örnekte, birer birer $((X=X+1))artırılır X( $((X++))ayrıca geçerli ve daha kısadır, ancak kabuk tarafından mutlaka desteklenmez), daha sonra $Xnull komutunun ilk argümanı olan yeni değerine genişler :. Null komutu bağımsız değişkenlerini yok sayar ve sonuç atılır (yan etkilerle birlikte).

Şahsen üç (nispeten öznel) nedenlerden dolayı ilk formu tercih ederim:

  • Boş komut, burada karışık soruların konusu olması nedeniyle belirtildiği gibi belirsiz ve yanlış anlaşılmıştır.
  • İlk form, genel kabuk dilbilgisi açısından daha doğal görünüyor ve hatta eski değerlendirme stilini biraz andırıyor.
  • İlk form daha net ve daha özlüdür ve bir komut içermez.

Sadece bir komutun ortamını değiştiriyorsanız, ilk sürümü kullanmanız gerekir.

X=$((X+1)) /usr/local/bin/something

Bağımsız değişkenlere doğrudan değerlendirme eklemek için ikinci formu kullanmanız gerekir:

ls -la "file-$((X++))"   # or ...
ls -la "file-$((X=X+1))" # for better compatibility

Bu istenen yan etkilere sahiptir, bir satır kaydeder ve oldukça açıktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.