, sen [[
bir bashism olduğunu habersiz olabilir. Bir bashizmin ne olduğunu bile bilmiyor olabilirsiniz, ama şimdiye kadar verilen cevaplar, onların kullanımını teşvik ederek sizi stunted betikleme yoluna götürecek bir yola yönlendiriyor.
Bir değişkenin Bourne kabuğunun herhangi bir çeşidindeki bir dizeyle eşleşip eşleşmediğini kontrol etmek için test $V = 14
yapabilirsiniz Tamsayıları karşılaştırmak için test $V -eq 14
kullanın. Tek fark, $ V'un bir tam sayı gibi görünmemesi durumunda ikincisinin bir hata üretmesidir. Değişkeni belirtmek için iyi nedenler vardır (test "$V" = 14
), ancak tırnak işaretleri genellikle gereksizdir ve ben bir ortak karışıklığın temel nedeni olduğuna inanıyorum, çünkü "14==14"
ile aynıdır, burada '==' kullanılmadığı daha açıktır. operatör olarak
nota birkaç şey vardır: kullanmak tek bir '=' yerine '==' bütün kabuklar tanımak '==', [
komut test
aynıdır ama ]
ve pek çok sh nihai bağımsız değişken gerektirir çünkü kodlama ilkeleri, [[
, yalnızca daha fazla anlaşılır kod oluşturduğundan, test
kullanılmasını önermektedir; bu nedenle, kabuk, [[
tanımak için görünmüyor ve bu adın bir komutunu arıyor gibi, birincil sorun budur. shebang gerçekten /bin/sh
yerine /bin/bash
belirtiyorsa, şaşırtıcıdır.
BTW, boşluklar olmadan, bu 14 'ile 14'leri karşılaştırmıyor,' 14 = 14 'dizesinin boş olup olmadığını kontrol ediyor. Aynısı, [["11" == "99"]] 'ile aynı sonucu verir, çünkü bu dize de boş değildir. –