कॉस्मेटिक / वरीयता के तर्कों के अलावा, एक कारण यह भी हो सकता है कि अधिक क्रियान्वयन ऐसे हों जहां [ ! "$a" = "$b" ]कोने के मामलों में असफलता हो [ "$a" != "$b" ]।
यदि कार्यान्वयन POSIX एल्गोरिथ्म का पालन करते हैं , तो दोनों मामले सुरक्षित होने चाहिए , लेकिन आज भी (2018 की शुरुआत में लेखन के रूप में), अभी भी ऐसे कार्यान्वयन हैं जो विफल हो जाते हैं। उदाहरण के लिए, इसके साथ a='(' b=')':
$ (a='(' b=')'; busybox test "$a" != "$b"; echo "$?")
0
$ (a='(' b=')'; busybox test ! "$a" = "$b"; echo "$?")
1
dash0.5.9 से पहले के संस्करणों के साथ , shउदाहरण के लिए Ubuntu 16.04 पर 0.5.8 जैसा पाया गया :
$ a='(' b=')' dash -c '[ "$a" != "$b" ]; echo "$?"'
0
$ a='(' b=')' dash -c '[ ! "$a" = "$b" ]; echo "$?"'
1
(0.5.9 में तय किया गया, https://www.mail-archive.com/dash@vger.kernel.org/msg00911.html देखें )
उन कार्यान्वयन का इलाज [ ! "(" = ")" ]के रूप में [ ! "(" "text" ")" ]वह यह है कि [ ! "text" ](परीक्षण है कि क्या "पाठ" अशक्त स्ट्रिंग है) POSIX जनादेश इसे होने की जबकि [ ! "x" = "y" ](परीक्षण "x" और समानता के लिए "Y")। वे कार्यान्वयन विफल हो जाते हैं क्योंकि वे उस मामले में गलत परीक्षण करते हैं।
ध्यान दें कि अभी एक और रूप है:
! [ "$a" = "$b" ]
उस व्यक्ति को POSIX शेल की आवश्यकता होती है (पुराने बॉर्न शेल के साथ काम नहीं करेगा)।
ध्यान दें कि कई कार्यान्वयनों के साथ [ "$a" = "$b" ](और [ "$a" != "$b" ]) के साथ समस्याएं थीं और अभी भी सोलारिस 10 (एक बॉर्न शेल, पोसिक्स शेल के अंदर ) पर [बिल्टिन की तरह है । इसलिए आप चीजों को देखते हैं:/bin/sh/usr/xpg4/bin/sh
[ "x$a" != "x$b" ]
पुराने सिस्टम में पोर्टेबल होने की कोशिश करने वाली स्क्रिप्ट में।
!(x==y)से(!x)==y।