[ -n ]-nपरीक्षण का उपयोग नहीं करता है ।
-nमें [ -n ]सभी में एक परीक्षण नहीं है। जब वहाँ के बीच केवल एक ही तर्क है [और ], उस कथन की एक स्ट्रिंग है कि यदि यह रिक्त है देखने के लिए परीक्षण किया जाता है है। यहां तक कि जब उस स्ट्रिंग में एक अग्रणी होता है -, तब भी इसे एक ऑपरेंड के रूप में व्याख्या किया जाता है, एक परीक्षण नहीं। चूंकि स्ट्रिंग -nखाली नहीं है - इसमें दो वर्ण हैं, -और n, शून्य वर्ण नहीं हैं -[ -n ] सत्य का मूल्यांकन करता है।
जैसा कि इग्नासियो वाज़केज़-अब्राम्स कहते हैं , जहां stringएक ही तर्क है, जिस पर परीक्षण किया गया stringहै , वह उसी तरह है जिस पर परीक्षण किया गया था । कब क्या हो जाए , कुछ खास नहीं होता। में और दूसरे में बस तार कर रहे हैं खालीपन के लिए परीक्षण किया जा रहा।[ string ][ -n string ]string-n-n[ -n ]-n[ -n -n ]
जब आपस में केवल एक ही तर्क होता है , [और ]उस तर्क को हमेशा गैर-बराबरी के लिए जांचा जाने वाला एक स्ट्रिंग है, भले ही ऐसा हो कि इसे एक परीक्षण के रूप में नाम दिया जाए। इसी तरह, जब दोनों के बीच दो तर्क होते हैं [और ]उनमें से पहला होता है -n, दूसरा हमेशा अनिद्रा के लिए परीक्षण किया जाने वाला एक स्ट्रिंग है, भले ही ऐसा हो कि इसे परीक्षण के रूप में नाम दिया जाए। यह केवल इसलिए है क्योंकि वाक्यविन्यास [जोर देता है कि एक स्ट्रिंग ऑपरेटर के बीच [और ]बाद -nमें एक एकल तर्क है।
एक ही कारण है कि के लिए [ -n ]उपयोग नहीं करता है -nपरीक्षण, [ -z ]का उपयोग नहीं करता -zपरीक्षण।
आप इसके लिए मदद की जांच करके इसके बारे [में अधिक जान सकते हैं bash। सूचना है कि एक शेल बनाया गया है :
$ type [
[ is a shell builtin
इस प्रकार आप इस help [पर सहायता प्राप्त करने के लिए दौड़ सकते हैं :
$ 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 `['.
अधिक जानकारी के लिए, क्या परीक्षण समर्थित हैं और वे कैसे काम करते हैं, सहित, आपको मदद को देखना होगा test। जब आप कमांड चलाते हैं help test, तो आपको एक विस्तृत सूची मिलेगी। यह सब पुन: पेश करने के बजाय, यहाँ स्ट्रिंग ऑपरेटरों के बारे में हिस्सा है:
-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.
ध्यान दें कि -n STRINGऔर बस STRINGएक ही काम करें: वे परीक्षण करते हैं कि क्या स्ट्रिंग STRINGखाली नहीं है।
[ -t ]परीक्षण कर रहा था कि क्या stdout एक टर्मिनल था (छोटा है[ -t 1 ]) और कुछ गोले अभी भी कर रहे हैं (ksh93केवल मामले में जब वह-tशाब्दिक है), इसलिए इसका उपयोग करना बेहतर[ -n "$var" ]है[ "$var" ]। हालांकि है कि अभी भी कुछ पुराने में विफल हो जाएगाtestके मूल्यों के लिए कार्यान्वयन$varकी तरह=, जिस स्थिति में[ "" != "$var" ]या[ "x$var" != x ]याcase $x in "")...बेहतर हो सकता है।