একই অক্ষর অনুসারে সেই অক্ষরগুলির ফলাফল That's
আপনি এটি লক্ষ্য করবেন
sort -u << EOF
■
⅕
⅖
⅗
EOF
কেবল একটি লাইন প্রদান করে।
বা যে:
expr ■ = ⅕
সত্য (পিএসআইএক্সের প্রয়োজন অনুসারে) প্রদান করে।
জিএনইউ সিস্টেমে প্রেরিত বেশিরভাগ স্থানীয় অবস্থানগুলিতে অনেকগুলি অক্ষর রয়েছে (এবং এমনকি অক্ষরের ক্রমগুলিও (কোলটিং সিকোয়েন্সগুলি)) যা একই বাছাইয়ের ক্রম রয়েছে। এই ⅕⅖⅗ ⅕⅖⅗ এর ক্ষেত্রে, কারণ অর্ডারটি সংজ্ঞায়িত করা হয়নি, এবং যে অক্ষরগুলির অর্ডার সংজ্ঞায়িত করা হয়নি তাদের জিএনইউ সিস্টেমে একই বাছাইয়ের ক্রম থাকা শেষ হয়। এমন অক্ষর রয়েছে যেগুলি Ș এবং like এর মতো একই বাছাইয়ের ক্রম হিসাবে স্পষ্টভাবে সংজ্ঞায়িত করা হয়েছে (যদিও এটি আমার কাছে কোনওভাবেই প্রকাশিত হয়নি) এটি কীভাবে হয় তার বাস্তব যুক্তি বা ধারাবাহিকতা)।
এটি বেশ অবাক করা এবং বোগাস আচরণের উত্স। আমি খুব সম্প্রতি অস্টিন গ্রুপে (পসিক্স এবং সিঙ্গেল ইউএনএক্স স্পেসিফিকেশনের পিছনে বডি) মেলিং তালিকায় বিষয়টি উত্থাপন করেছি এবং 2015-04-03 পর্যন্ত আলোচনা এখনও চলছে।
এই ক্ষেত্রে, কোথায় [y]
মিলছে এবং একইটি সাজানো উচিত কিনা তা আমার কাছে অস্পষ্ট but তবে যেহেতু বন্ধনী প্রকাশটি কোনও কোলটিং উপাদানটির সাথে মেলে তাই বোঝা যায় যে আচরণটি প্রত্যাশিত।x
x
y
bash
যে কোনও ক্ষেত্রে, আমি মনে করি [⅕-⅕]
বা কমপক্ষে মিলানো [⅕-⅖]
উচিত ■
।
আপনি লক্ষ্য করবেন যে বিভিন্ন সরঞ্জাম আলাদাভাবে আচরণ করে। ksh93 bash
GNU এর মতো আচরণ করে grep
বা sed
না করে। কিছু অন্যান্য শেলের বিভিন্ন আচরণ রয়েছে যার কিছু yash
বেশি বগির মতো।
সামঞ্জস্যপূর্ণ আচরণ করতে আপনার একটি লোকেল প্রয়োজন যেখানে সমস্ত অক্ষর আলাদা আলাদাভাবে সাজান। সি লোকেলটি সাধারণত একটি। তবে বেশিরভাগ সিস্টেমে সি লোকালে সেট করা চরিত্রটি ASCII। জিএনইউ সিস্টেমে আপনার কাছে সাধারণত একটি C.UTF-8
লোকালে অ্যাক্সেস থাকে যা ইউটিএফ -8 অক্ষরটিতে কাজ করার পরিবর্তে ব্যবহার করা যেতে পারে।
তাই:
(export LC_ALL=C.UTF-8; [[ ■ = [⅕⅖⅗] ]])
বা মান সমতুল্য:
(export LC_ALL=C.UTF-8
case ■ in ([⅕⅖⅗]) true;; (*) false; esac)
মিথ্যা ফিরে আসা উচিত।
অন্য বিকল্পটি কেবল LC_COLLATE
সি- তে সেট করা হবে যা জিএনইউ সিস্টেমে কাজ করবে, তবে অন্যের ক্ষেত্রে এটি প্রয়োজনীয় নয় যেখানে এটি মাল্টি-বাইট চরিত্রের বাছাইয়ের ক্রম নির্দিষ্ট করতে ব্যর্থ হতে পারে।
এর একটি পাঠ হ'ল সাম্যতা যেমন স্ট্রিংয়ের সাথে তুলনা করার ক্ষেত্রে প্রত্যাশা করা ততটা পরিষ্কার ধারণা নয়। সমতা অর্থাত্ কঠোর থেকে কঠোরতম হতে পারে।
- একই সংখ্যক বাইট এবং সমস্ত বাইট উপাদানগুলির একই মান রয়েছে।
- অক্ষরের সংখ্যা এবং সমস্ত অক্ষর একই (উদাহরণস্বরূপ, বর্তমান অক্ষরে একই কোডপয়েন্ট দেখুন)।
- দুটি স্ট্রিংয়ের লোকেলের কোলেশন অ্যালগরিদম অনুসারে একই বাছাইয়ের ক্রম রয়েছে (এটি কোনও <b বা b> a সত্য নয়)।
এখন, 2 বা 3 এর জন্য, ধরে নেওয়া হয়েছে যে উভয় স্ট্রিংয়ে বৈধ অক্ষর রয়েছে। ইউটিএফ -8 এবং কিছু অন্যান্য এনকোডিংগুলিতে কিছু বাইটের ক্রম বৈধ অক্ষর তৈরি করে না।
1 এবং 2 অগত্যা এটির কারণে সমতুল্য নয় বা কিছু অক্ষরগুলির একাধিক সম্ভাব্য এনকোডিং থাকতে পারে। এটি সাধারণত আইএসও -২২২২-জেপির মতো রাষ্ট্রীয় এনকোডিংয়ের ক্ষেত্রে যেখানে A
প্রকাশিত হতে পারে 41
বা 1b 28 42 41
( 1b 28 42
ASCII এ স্যুইচ করার ক্রম হতে পারে এবং আপনি যতগুলি চান তার মধ্যে অনেকগুলি canোকাতে পারেন, এতে কোনও তফাত হবে না), যদিও আমি এই ধরণের এনকোডিংটি এখনও ব্যবহারের প্রত্যাশা করবে না এবং জিএনইউ সরঞ্জামগুলি সাধারণত তাদের সাথে সঠিকভাবে কাজ করে না don't
এছাড়াও সাবধান যে বেশিরভাগ নন-জিএনইউ ইউটিলিটিগুলি 0 বাইট মান (ASCII এর NUL চরিত্র) সাথে ডিল করতে পারে না।
এই সংজ্ঞাগুলির মধ্যে কোনটি ব্যবহৃত হয় তা ইউটিলিটি এবং ইউটিলিটি বাস্তবায়ন বা সংস্করণের উপর নির্ভর করে। POSIX এটিতে 100% পরিষ্কার নয়। সি লোকালে, সমস্ত 3 সমান। এর বাইরে ওয়াইএমএমভি।