Bu iki deyim arasındaki bash arasındaki fark nedir?


cevap 1:

$ 1 "." Dan sonra bir boşluk içeriyorsa, bunlar farklıdır. Diyelim ki (bazı nedenlerden dolayı) "something.foo bar" adında bir dosyanız var. Belki yanlış yazdın. Sonra $ fileext "foo bar" olacaktır. Ardından, ilk örnek şu şekilde genişleyecektir:

eğer ["foo bar" = "csv"]; sonra

hangi iyi çalışıyor. İkinci örnek howerver'ınız:

eğer [foo bar = "csv"]; sonra

Bu bir sözdizimi hatasıdır (çok fazla argüman).

Kabuk komut dosyalarındaki "değişkenler" in, C'den Python'a "uygun" programlama dillerinde olduğu gibi bellek konumları için ad olmadığını unutmayın. Makro parametreleri gibi davranırlar: program metninde değiştirilirler ve daha sonra sonuç yürütülür. PHP'nin "$ foo" == "x" ve $ foo == "x" dizelerin içindeki $ foo sözdizimine de izin veren "uygun" bir programlama dilinde aynıdır (en azından $ foo bir dize ise) .


cevap 2:

Birincisi daha sağlamdır. $ Fileext'in boş dize olması durumunda, ikinci örnekte 3. satırdaki karşılaştırma başarısız olur.

$ Fileext değişkenini tırnak içine almak, karşılaştırmanın her zaman geçerli bir işlem olmasını sağlar - $ 1 boşsa, dosya adı ve dosya metni boş olur, bu da ikinci örnekte 3. satırda sözdizimi hatasına neden olur.

Olası bir ilgi alanı: eğer dosya adında '' 'yoksa dosya metni dosya adıyla aynı olacaktır. içinde..