বর্গাকার বন্ধনী গ্লোববিংয়ের ক্ষেত্রে সংবেদনশীলতা


10

সাধারণত, বাশ গ্লোব্বিং কেস সংবেদনশীল:

$ echo c*
casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py
$ echo C*
CarePackage.md ChocRippleCake.md Clips

বর্গাকার বন্ধনী ব্যবহার করে এটি পরিবর্তন হবে বলে মনে হয় না:

$ echo [c]*
casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py
$ echo [C]*
CarePackage.md ChocRippleCake.md Clips

হাইফেন ব্যবহার করা হলেও এটি এখনও এটি পরিবর্তন করে না:

$ echo [c-c]*
casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py
$ echo [C-C]*
CarePackage.md ChocRippleCake.md Clips

তবে চিঠিগুলি ছেদ করা হয়:

$ echo [B-C]*
CarePackage.md casefix.pike cdless chalices.py charconv.py chocolate.pike ChocRippleCake.md circum.py clip.pike Clips cpustats.pike crop.pike cwk2txt.py
$ echo [b-c]*
beehive-anthem.txt bluray2mkv.pike branch branchcleanup.pike burdayim.pike casefix.pike cdless chalices.py charconv.py chocolate.pike circum.py clip.pike cpustats.pike crop.pike cwk2txt.py

এটি পরামর্শ দেয় যে হাইফেন একটি লোকাল অর্ডার ব্যবহার করছে, "AaBbCcDd"। সুতরাং: বড় হাতের অক্ষর দিয়ে শুরু হওয়া সমস্ত ফাইলের জন্য কী কোনও উপায় আছে?


3
[জেড] ব্যতীত প্রতিটি ছোট হাতের অক্ষরের সাথে [এজেড] মেলে এমন গোচাতেও খেয়াল করুন!
পিজেট্রাইল

উত্তর:


12

বাশ সংস্করণে ৪.৩ এবং তারপরে, একটি শপ্ট বিকল্প রয়েছে globasciiranges:

মতে GNU man পৃষ্ঠা builtin shopt :

globasciiranges
যদি সেট করা থাকে, প্যাটার্ন ম্যাচিং বন্ধনী এক্সপ্রেশনগুলিতে ব্যবহৃত পরিসীমা এক্সপ্রেশন (প্যাটার্ন ম্যাচিং দেখুন) তুলনা করার সময় প্রচলিত সি লোকেলের মতো আচরণ করে। এটি হ'ল, বর্তমান লোকেলের কোলটিং ক্রমটি বিবেচনায় নেওয়া হয়নি, সুতরাং 'বি' 'এ' এবং 'বি' এর মধ্যে কোলেটিং করবে না, এবং উচ্চ-কেস এবং লোয়ার-কেস এএসসিআইআই অক্ষর একসাথে কোলেটেস্ট হবে।

ফলস্বরূপ আপনি পারেন

$ shopt -s globasciiranges 
$ echo [A-Z]*

shopt -uঅক্ষম করার জন্য ব্যবহার করুন ।

আর একটি উপায় হ'ল লোকেলটি সিতে পরিবর্তন করা আপনি একটি সাবসেল ব্যবহার করে অস্থায়ীভাবে এটি করতে পারেন:

$ ( LC_ALL=C ; printf '%s\n' [A-Z]*; )

আপনার প্রয়োজনীয় ফলাফলগুলি পাবেন এবং সাব শেলটি শেষ হয়ে গেলে, আপনার প্রধান শেলের লোকেল আগে যা ছিল তার সাথে অপরিবর্তিত রয়েছে।

বাশ শপ বিকল্পের সাথে [A-Z]ব্রেস এক্সপেনশন ব্যবহার করার পরিবর্তে অন্য বিকল্প।{A..Z}nullglob

nullglobবিকল্পটি সক্ষম করে , পথের নাম প্রসারণের সময় যদি কোনও প্যাটার্নটি মেলে না, তবে প্যাটার্নের পরিবর্তে নাল স্ট্রিংটি ফিরে আসে।
ফলস্বরূপ এইটি প্রত্যাশার মতো কাজ করবে:

$ shopt -s nullglob;printf '%s\n' {A..Z}*

2
পারফেক্ট, ধন্যবাদ আমি ব্যবহার করতে পারি না [[:upper:]]কারণ আমি আসলে বর্ণমালার কেবলমাত্র একটি অংশ চাই, তবে এটি কাজ করে।
রসুয়াভ

1
@রোসুভ স্বাগতম সাব শেল বিকল্পটিও পরীক্ষা করে দেখুন।
জর্জ ভ্যাসিলিউ

"যদি সক্ষম সি লোকেলের সমান হয়" - আপনার অর্থ কি এটি গ্লোব্বিংয়ের জন্য ব্যবহৃত লোকেলকে প্রভাবিত করে এবং অন্য কিছুই? (একটি রেফারেন্স লিঙ্কটি সহায়ক হত - আমি সবচেয়ে ভাল খুঁজে পেতে পারি gnu.org/software/bash/manual/html_node/Pattern-Matching.html , তবে আমি সমস্ত শেল বিকল্পের একটি তালিকা পছন্দ করতাম তবে গ্লোব্যাসাইরেঞ্জগুলি অনুপস্থিত is থেকে gnu.org/software/bash/manual/html_node/... ; এছাড়াও প্রশ্ন unix.stackexchange.com/questions/227070/... হ্যান্ডলগুলি এই সমস্যা ব্যাপকভাবে) এ ছাড়া সংস্করণ 4.3 থেকে।।
পিজেট্রাইল

@ পিজেট্রাইল সমস্ত শপ বিকল্পের রেফারেন্স লিঙ্ক সহ আমার সম্পাদনা দেখুন। এছাড়াও আপনি man bashআপনার টার্মিনালে চালাতে পারেন এবং /গ্লোব্যাসিরিঞ্জগুলির জন্য অনুসন্ধান (ব্যবহার করে ) করতে পারেন।
জর্জ ভ্যাসিলিউ

LC_ALL=C printf '%s\n' [A-Z]*আপনার দ্বিতীয় সমাধানের জন্য কাজ করবে না - সাবসেল ছাড়াই? বিটিডাব্লু: একটি টাইপো রয়েছে: nullblogতবে এটি সংশোধন করার পক্ষে খুব কম অক্ষর রয়েছে।
জো

5

আপনি সমস্ত বড় হাতের অক্ষর ঠিক যেমন লিখতে পারেন:

[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*

বা ব্যবহার [:upper:]আপনার বর্তমানের সমস্ত বড় হাতের অক্ষরের প্রতিনিধিত্ব করতে নামযুক্ত চরিত্রের শ্রেণিটি ব্যবহার করতে পারে locale:

[[:upper:]]*

যেমন আপনি লক্ষ্য করেছেন, [B-C]একই বর্ণানুক্রমিক চরিত্রের জন্য উপরের এবং নিম্ন কেসগুলির মতো পরিসরটি সংলগ্নভাবে সাজানো হচ্ছে (এর কোলিশেশন অনুসারে locale)।


3

অক্ষর পরিসরে "অপরিজ্ঞাত" অক্ষরগুলি অন্তর্ভুক্ত করা, যেমন একটি সীমার ছোট হাতের অক্ষর অন্তর্ভুক্ত যার সীমানা বড় হাতের অক্ষরগুলির সাথে থাকে, LC_COLLATEলোকেল সেটিংয়ের কারণে is LC_COLLATEসাজানোর ক্রমটি নির্দেশ করে বলে মনে করা হয়, তবে এটি এটির একটি খারাপ কাজ করে (লোকালগুলি যা করতে পারে তার থেকে বাছাইয়ের স্ট্রিংগুলি আরও জটিল) এবং আপনি এটি ছাড়া ভাল। আমি LC_COLLATEআপনার স্থানীয় সেটিংস থেকে সরানোর পরামর্শ দিই । আপনি হবে যদি সেটিং LANG, বা LANGUAGEযে নির্ধারণ করে না এবং শুধুমাত্র বেশী স্থাপন করেন তখন আপনাকে প্রয়োজন: LC_CTYPE, LC_MESSAGES, LC_TIME

স্থানীয় অবস্থান সম্পর্কে আরও পটভূমির জন্য, আমার লোকেলটি আমার কীতে সেট করা উচিত এবং এর কী কী প্রভাব রয়েছে? এবং LC_ * সেট করুন তবে এলসি_এলএল নয়

ব্যবহারকারীর সেটিংস নির্বিশেষে কোনও স্ক্রিপ্টে নির্ভরযোগ্য ফলাফল পেতে সেট করুন LC_ALL=C


0

সেট করুন:

shopt -u nocaseglob

বাশ ম্যান পৃষ্ঠা থেকে:

>     nocaseglob
>         If  set,  bash matches filenames in a case-insensitive
>         fashion when performing pathname expansion (see Pathname
>          Expansion above).

আপনি যদি 'গ্লোব্যাসিরিঞ্জস' সেট করেন তবে আমি জানি না যে ইউটিএফ -8 এর মতো অ-অসি চরিত্রগুলির কী হবে


0

প্রতিধ্বনি [সিসি] * আপনার যা করা উচিত তা করা উচিত, একইভাবে [এ-জা-জেড] *

আমি এখানে আছি কারণ আমার সিস্টেমে গ্লোবালিং কেবল সংবেদনশীল হওয়া বন্ধ করে দিয়েছে , তাই আমার স্ক্রিপ্টগুলির প্রচুর পরিমাণে আর যেমন কাজ করা উচিত হয় তেমন কাজ করে না :-(


আমি যা দেখছি তার বিপরীত। তবে পরামর্শের জন্য অন্যান্য উত্তরগুলি পরীক্ষা করুন।
রসুয়াভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.