প্রসাধনী / পছন্দ যুক্তিগুলির পাশাপাশি, একটি কারণ হতে পারে এমন আরও বাস্তবায়ন রয়েছে যেখানে [ ! "$a" = "$b" ]
কোণার ক্ষেত্রে ব্যর্থ হয় [ "$a" != "$b" ]
।
উভয় ক্ষেত্রেই নিরাপদ হওয়া উচিত যদি বাস্তবায়নগুলি পসিক্স অ্যালগরিদম অনুসরণ করে তবে আজও (লিখিতভাবে 2018 সালের শুরুতে) এখনও কার্যকর রয়েছে যা ব্যর্থ হয়। উদাহরণস্বরূপ, এর সাথে a='(' b=')'
:
$ (a='(' b=')'; busybox test "$a" != "$b"; echo "$?")
0
$ (a='(' b=')'; busybox test ! "$a" = "$b"; echo "$?")
1
সঙ্গে dash
0.5.9 পূর্বে সংস্করণ 0.5.8 পাওয়া যায় মত sh
উদাহরণস্বরূপ উবুন্টু 16,04 করুন:
$ a='(' b=')' dash -c '[ "$a" != "$b" ]; echo "$?"'
0
$ a='(' b=')' dash -c '[ ! "$a" = "$b" ]; echo "$?"'
1
(০.০.৯ এ স্থির হয়েছে, https://www.mail-archive.com/dash@vger.kernel.org/msg00911.html দেখুন )
এই বাস্তবায়নগুলি [ ! "(" = ")" ]
যেমনটি [ ! "(" "text" ")" ]
হয় [ ! "text" ]
("টেক্সট" নাল স্ট্রিং কিনা তা পরীক্ষা করে) তবে পসিক্স এটিকে [ ! "x" = "y" ]
(সাম্যের জন্য "x" এবং "y" হিসাবে পরীক্ষা করার নির্দেশ দেয় )। এই প্রয়োগগুলি ব্যর্থ হয় কারণ তারা এই ক্ষেত্রে ভুল পরীক্ষা করে।
মনে রাখবেন যে আরও একটি ফর্ম রয়েছে:
! [ "$a" = "$b" ]
এটির জন্য একটি পসিক্স শেল প্রয়োজন (পুরানো বোর্ন শেলটি দিয়ে কাজ করবে না)।
নোট করুন যে বেশ কয়েকটি বাস্তবায়নের ক্ষেত্রেও [ "$a" = "$b" ]
(এবং [ "$a" != "$b" ]
) সমস্যা রয়েছে এবং এখনও সোলারিস 10 (একটি বোর্ন শেল, পসিক্স শেলটি রয়েছে ) এর [
বিল্টিনের মতোই রয়েছে । এজন্য আপনি যেমন জিনিস দেখতে পান:/bin/sh
/usr/xpg4/bin/sh
[ "x$a" != "x$b" ]
স্ক্রিপ্টগুলিতে পুরানো সিস্টেমে পোর্টেবল হওয়ার চেষ্টা করছে।
!(x==y)
থেকে(!x)==y
।