Ana Sayfa

Kabuk Betiklerinde 'test' ve '[' Komutlarının Gizemi

1 dk okuma

Kabuk betiklerinde koşullu ifadeleri kontrol etmek için sıkça kullanılan [ ... ] yapısı, birçok geliştiricinin aşina olduğu bir yöntemdir. Ancak bu yapının ardında yatan test komutu, çoğu zaman göz ardı edilen bir geçmişe sahiptir. Makale, yazarın üniversite yıllarında test komutunu kullanmaya zorlanmasıyla başlıyor ve bu komutun aslında /usr/bin veya /bin gibi dizinlerde bulunan standart bir program olduğunu ortaya koyuyor. test -f "$file" gibi kullanımların, dosya varlığını kontrol etmek için temel bir yol olduğunu belirtiyor.

Zamanla, yazarın Linux kitapları okurken [ ... ] sözdizimini keşfetmesiyle hikaye derinleşiyor. Bu parantezlerin, C dilindeki if ( ... ) yapısına benzer şekilde kullanılabileceği fark ediliyor. Daha sonra yapılan araştırmalar, [ komutunun da tıpkı test gibi ayrı bir komut olduğunu ve hatta ls -l çıktılarında /bin/test ve /bin/[ komutlarının aynı programı işaret ettiğini gösteriyor. Bu durum, [ kullanıldığında aslında test komutunun çağrıldığı anlamına geliyor.

Makale, kapanış ] parantezinin rolüne de açıklık getiriyor. Başlangıçta bir kabuk sözdizimi zorunluluğu olduğu düşünülse de, aslında [ komutunun kendisi, son argümanının ] olup olmadığını kontrol ediyor. Eğer [ olarak çağrılmışsa ve son argüman ] değilse bir hata fırlatılıyor. Bu davranış, FreeBSD'deki test uygulamasının kaynak kodundan örnekle destekleniyor. Ancak yazar, günümüzdeki birçok Linux makinesinde test ve [ komutlarının artık aynı program olmadığını gözlemleyerek, bu bilginin zamanla değişebileceğine dikkat çekiyor.

İçgörü

Kabuk betiklerinde yaygın olarak kullanılan `[` komutunun aslında `test` komutunun bir kısayolu olduğunu ve kapanış `]` parantezinin komutun argümanı olarak işlev gördüğünü ortaya koyarak, bu temel araçların beklenenden daha karmaşık bir yapısı olduğunu gösteriyor.

Kaynak