3 puan yazan GN⁺ 2023-11-24 | 1 yorum | WhatsApp'ta paylaş

Unix sistemlerindeki ilginç ikili dosya

  • Unix sistemlerinde adı tek bir sembolden oluşan ikili dosyalar bulunur.
  • /bin/[ komutu çalıştırıldığında, adı [ olan bir program olduğu görülebilir.
  • [ ve test aynı ikili dosyayı işaret eder ve iki komut da gerçekte aynı işlevi yerine getirir.

test programı ve [ kullanımı

  • test programı, shell içinde ifadeleri değerlendirmek için kullanılır.
  • String karşılaştırmaları, sayı karşılaştırmaları ve dosya koşullarını kontrol etmek için kullanılır.
  • test, argümanları alıp ifadeyi değerlendirir; doğruysa 0, yanlışsa 1 döndürür.

İki komutun var olma nedeni

  • test ve [ komutlarının ikisinin de neden var olduğu net değildir, ancak okunabilirliği artırmak için böyle olduğu tahmin edilir.
  • [ komutu kullanıldığında koşul ifadeleri teste göre daha temiz yazılabilir.
  • [ kullanılırken komutun son argümanının ] ile bitmesi gerekir.

Yerleşik komutlar ile harici ikili dosyalar arasındaki fark

  • test ve [ shell scriptlerinde sık kullanıldığı için çoğu shell'de yerleşik komut olarak uygulanır.
  • Yerleşik komutlar ile harici ikili dosyalar kullanıldığında farklı davranışlar görülebilir; shell'e göre de farklar oluşabilir.

[[ kullanımı ve farkları

  • [[, Bash uzantısı olarak [ kullanımının yerini alır.
  • [[, yerleşik komut olarak ifade içinde dilin temel kurallarını değiştirebilir.
  • [[, string karşılaştırmalarında glob pattern'leri literal olarak ele alarak farklı sonuçlar üretebilir.

Shell script yazarken seçim

  • Taşınabilir shell scriptleri yazarken [ kullanmak daha iyidir.
  • Bash'e özel scriptler yazıyorsanız, [[ daha fazla özellik sunduğu için tercih edilebilir.

Shell ifadeleri ile test ifadelerinin birleşimi

  • Shell, !, &&, || operatörleri üzerinden kendi ifade yapısına sahiptir.
  • test ifadeleri ile shell ifadeleri tek bir komut içinde birleştirilebilir.

GN⁺ görüşü

Bu yazıdaki en önemli nokta, Unix sistemlerinde [ ve testin aynı işlevi yerine getiren iki farklı komut olarak bulunmasıdır; bunun shell scriptlerinin okunabilirliğini ve verimliliğini artırmak için olduğu tahmin edilir. Bu bilgi, shell script yazan veya anlamaya çalışan başlangıç seviyesindeki yazılım mühendisleri için faydalı olabilir ve shell scriptlerin çalışma mantığını ve farklı shell'ler arasındaki ayrımları anlamaya yardımcı olur. Yazının ilgi çekici yanı, shell scriptlerin temel araçlarının nasıl farklı biçimlerde kullanılabildiğini göstermesi ve shell programlamanın karmaşıklığını ve esnekliğini iyi yansıtmasıdır.

1 yorum

 
GN⁺ 2023-11-24
Hacker News görüşleri
  • Asıl yazarın teşekkür mesajı ve başlık düzeltme önerisi

    Asıl yazar, yazının ilgi görmesinden dolayı teşekkür ediyor ve başlığa yılı eklemeyi, ayrıca test sözcüğünü büyük harfle yazmaktan kaçınmayı öneriyor. Çünkü test gerçekten bir komut anlamına geliyor.

  • Bourne shell'deki test komutunun geçmişi ve kişisel tercih

    Bourne shell'in IDE'lerin olmadığı bir dönemde oluşturulduğunu, bu yüzden parantez veya köşeli parantez olmadan test komutunun kullanıldığını açıklıyor. Kişisel olarak köşeli parantez biçimindense test biçimini tercih ettiğini söylüyor.

  • if bloğu kullanmadan koşul ifadelerine örnek

    if bloğu olmadan koşul ifadelerini kısa yazma yöntemini tanıtıyor ve debug çıktısını koşullu olarak stderr'e yazdırma örneği veriyor.

  • if bloğu ile normal komutların birlikte kullanımı

    if bloğunun normal komutları test edebildiğini gösteriyor; örnek olarak grep komutuyla log arama örneği veriyor.

  • test komutunda mantıksal işleç kullanımı üzerine düşünce

    test komutu içinde mantıksal işleçler kullanmak mı, yoksa ayrı koşul ifadeleri yazmak mı gerektiği üzerine düşündüğünü ifade ediyor. Performans sorunu yoksa her iki yaklaşım için de makul gerekçeler olduğunu söylüyor.

  • test komutunu kullanmanın avantajları ve man test kolaylığı

    Birkaç yıldır köşeli parantez yerine test komutunun kullanılmasını savunduğunu söylüyor. Bunun test'in basit bir komut olduğunu vurguladığını ve man bash içinde aramaktansa man test kullanmanın daha pratik olduğunu açıklıyor.

  • [ ve test için tek argüman davranışına dair uyarı

    Bir değişkenin boş olmadığını kontrol ederken değişken tırnak içine alınmazsa beklenmedik sonuçlar doğabileceği konusunda uyarıyor. Değişkenin tırnak içine alınması gerektiğini özellikle vurguluyor.

  • Linux ve NetBSD'de /bin/[ ile /bin/test arasındaki fark

    Linux'ta /bin/[ ile /bin/test farklıyken, NetBSD'de aynı olduğunu paylaşıyor.

  • test/[/[[ hakkında daha derin inceleme ve shell'in tuhaf yanlarına dair blog bağlantısı paylaşımı

    test, [, [[ hakkında daha derin bir anlayışa yardımcı olan belgeleri ve shell'in çeşitli özelliklerini açıklayan bir blog bağlantısını paylaşıyor.

  • [[ yapısının bash'e özgü olduğuna dikkat çekip, bash kullanılacağı kesinse [[ önerisi

    [[ yapısının yalnızca bash'e özgü olduğunu belirtiyor ve bash kullanılacağı kesinse [[ kullanılmasını tavsiye ediyor.

  • [ yapısının bash betik dilinin bir parçası olmadığı algısına dair kafa karışıklığı

    [ yapısının bash betik dilinin bir parçası değil de sadece basit bir program olduğunu anlamakta zorlandığını ifade ediyor ve bununla ilgili açıklama istiyor.

  • Shell hakkında güçlü görüşler ve [ kullanımına karşı çıkış

    [ kullanılmaması, sadece test kullanılması gerektiğine dair güçlü bir görüş dile getiriyor. [ yapısının dilin sözdiziminin bir parçası gibi görünse de gerçekte bir program olduğunu vurguluyor ve string değerlendirmelerinde case ifadesinin kullanılması gerektiğini savunuyor.