[ -n ]-ntesti kullanmaz .
-nİçinde [ -n ]hiç bir test değildir. Orada arasında yalnızca bir argüman olduğunda [ve ]argüman boş olup olmadığını görmek için test edilir bir dizesi olduğunu. Bu dizgenin öncüsü olsa bile -, yine de bir test değil, bir işlenen olarak yorumlanır. Dize yana -nboş değil - iki karakter içeriyor, -ve n, değil sıfır karakterler-- [ -n ]değerlendirir true.
As Ignacio Vazquez-Abrams diyor , nerede stringtek bağımsız değişken test üzerinde gerçekleştirilen olduğu stringiçinde deney tarafından kendisine gerçekleştirilen aynıdır . Ne zaman olur , hiçbir şey özel olmuyor. İçinde ve ikinci yılında sadece dizeleri Boş olup olmadığı test edilen.[ string ][ -n string ]string-n-n[ -n ]-n[ -n -n ]
Orada arasında yalnızca bir argüman olduğunda [ve ]argüman nonemptiness için test edilecek bir dize, bir test olarak aynı adlandırılacak bir sorun olsa bile, her zaman olduğu. Benzer şekilde, orada ikisi arasında argümanlar olduğunda [ve ]ve bunların ilkidir -n, ikincisi ise bir test olarak aynı adlandırılacak bir sorun olsa bile, her zaman nonemptiness için test edilecek bir dizedir. Bunun nedeni basitçe sözdiziminin , dize işleneni [arasındaki [ve ]sonrasındaki tek bir argüman olduğu konusunda ısrarcı olmasıdır -n.
Testi [ -n ]kullanmayan aynı sebepten dolayı -ntesti [ -z ]kullanmaz -z.
Sen hakkında daha fazla bilgi edinebilirsiniz [içinde bashbunun için yardım inceleyerek. Yerleşik bir kabuk olduğuna dikkat edin :
$ type [
[ is a shell builtin
Böylece help [yardım almak için koşabilirsiniz :
$ help [
[: [ arg... ]
Evaluate conditional expression.
This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.
Hangi testlerin desteklendiğini ve nasıl çalıştıklarını içeren daha fazla bilgi için yardımı görmeniz gerekir test. Komutu çalıştırdığınızda help testayrıntılı bir liste alırsınız. Hepsini çoğaltmak yerine, dize operatörleri ile ilgili bölüm:
-z STRING True if string is empty.
-n STRING
STRING True if string is not empty.
STRING1 = STRING2
True if the strings are equal.
STRING1 != STRING2
True if the strings are not equal.
STRING1 < STRING2
True if STRING1 sorts before STRING2 lexicographically.
STRING1 > STRING2
True if STRING1 sorts after STRING2 lexicographically.
Buna dikkat edin -n STRINGve STRINGaynı şeyi yapın: dizenin STRINGboş olmadığını test ederler .
[ -t ]stdout'un bir terminal olup olmadığını (kısa için[ -t 1 ]) ve bazı kabukları hala yapıyorsa (ksh93sadece-thazır olduğunda ) kullandığına dikkat edin, bu nedenle kullanmak[ -n "$var" ]daha iyidir[ "$var" ]. Yine de bazı eski başarısız olur rağmentestdeğerleri için uygulamaları$vargibi=bu durumda,[ "" != "$var" ]ya[ "x$var" != x ]veyacase $x in "")...daha iyi olabilir.