বাশে [[: স্পেস:]] এর অর্থ কী?


23

আমি সবেমাত্র একটি বাশ স্ক্রিপ্ট জুড়ে এসেছি। [[:space:]]বাশ স্ক্রিপ্টের অর্থ কী ? ডাবল কোলন কেন?

উত্তর:


35

এটি প্রকৃতপক্ষে বাশ ম্যানুয়ালটিতে রয়েছে তবে এটি আপনি কী সন্ধান করছেন তা জানতে সহায়তা করে যা আপনি কী খুঁজছেন তা যদি না জানেন তবে এটি কার্যকর নয় । আপনি যদি অনুসন্ধান করেছেন [[আপনি [[ expression ]]শর্তাধীন অভিব্যক্তি বিভাগ দ্বারা বিভ্রান্ত হতে চাই । তদ্ব্যতীত, :space:একই বিভাগের অধীনে দুটি উদাহরণে আপনাকে অবতরণ করছে। আপনি উদাহরণটিতে ব্রেডক্রাম্ব অনুসরণ করতে পারেন:

উদাহরণস্বরূপ, শূন্য, স্থানের অক্ষর, শূন্য বা 'এ' এর একটি উদাহরণ সহ কোনও সংখ্যার সমন্বয়যুক্ত মানের মধ্যে অক্ষরের ক্রম থাকলে, নিম্নলিখিতটি একটি শেল (শেল ভেরিয়েবল লাইনে সঞ্চিত) সাথে মিলবে match 'বি':

[[ $line =~ [[:space:]]*?(a)b ]]

... যা থেকে আপনি একসাথে [[:space:]]অংশটি ভাগ করতে পারেন যে অংশটি "স্পেস ক্যারেক্টার্স" এর সাথে মিলেছে, তবে আপনাকে এই ভেবে ক্ষমা করা যেতে পারে যে এটি কেবল একটি আক্ষরিক মহাকাশ চরিত্র ছিল এবং পুরো অক্ষরের অক্ষর নয়, যা এটি প্রতিনিধিত্ব করে।

আপনি যদি (বা ঘটতে চান) অনলাইন বাশ ম্যানুয়ালটিতে স্ট্রিংটির " space"(অর্থাৎ একটি স্থান "স্পেস" শব্দের পরে) অনুসন্ধান করেন তবে সেখানে প্রায় 32 টি ম্যাচ "কেবল" আছে। দশমীর প্রায় এখানে থাকবে:

'[' এবং ']' এর মধ্যে অক্ষর ক্লাসগুলি সিনট্যাক্স ব্যবহার করে নির্দিষ্ট করা যেতে পারে [: শ্রেণী:], যেখানে ক্লাসটি পসিক্স স্ট্যান্ডার্ডে সংজ্ঞায়িত নিম্নলিখিত ক্লাসগুলির মধ্যে একটি:

alnum   alpha   ascii   blank   cntrl   digit   graph   lower
print   punct   space   upper   word    xdigit

একটি অক্ষর শ্রেণি that শ্রেণীর অন্তর্গত যে কোনও বর্ণের সাথে মেলে।

এরপরে যা আপনাকে পসিক্স স্ট্যান্ডার্ডে নিয়ে যাবে যেখানে আপনি "চরিত্রের শ্রেণি" শব্দটি অনুসন্ধান করতে এবং খুঁজে পেতে পারেন

wctype, wctype_l - চরিত্র শ্রেণি সংজ্ঞায়িত করুন , যা আপনাকে যতটা পারা যায় :

Wctype () [CX] [অপশন স্টার্ট] এবং wctype_l () [অপশন শেষ] ফাংশনগুলি বর্তমান লোকেলের [CX] [অপশন স্টার্ট] তে অক্ষর টাইপের তথ্য দ্বারা সংজ্ঞায়িত কোডযুক্ত অক্ষরের সেট অনুসারে কোডটি অক্ষরের সেট অনুসারে wctype_t এর মান নির্ধারণ করবে [ বা লোকেল দ্বারা প্রতিনিধিত্ব করা লোকলে, যথাক্রমে [বিকল্প শেষ] (বিভাগে এলসি_সিটিওয়াইপি)।

এরপরে যদি আপনি সেটলোকল লিঙ্কটি অনুসরণ করেন তবে অবশেষে আপনার আসল উত্তরটি পাবেন, স্থানীয় বিভাগে :

স্থান

সাদা-স্থান অক্ষর হিসাবে শ্রেণীবদ্ধ করা অক্ষরগুলি সংজ্ঞায়িত করুন। পসিক্স লোকালে সঠিকভাবে <space>, <form-feed>, <newline>, <carriage-return>, <tab>, and <vertical-tab>অন্তর্ভুক্ত করা হবে।

কোনও স্থানীয় সংজ্ঞা ফাইলে, উপরের, নিম্ন, আলফা, অঙ্ক, গ্রাফ বা এক্সডিজিটের জন্য কীওয়ার্ড নির্দিষ্ট করা হবে না। <space>, <form-feed>, <newline>, <carriage-return>, <tab>, and <vertical-tab>পোর্টেবল অক্ষর সেট এবং ক্লাস ফাঁকা অন্তর্ভুক্ত কোনো অক্ষরের স্বয়ংক্রিয়ভাবে এই শ্রেণীর অন্তর্ভুক্ত করা হয়।


1
LESS=+'/Within \[ and \],' man bash32 nএক্স কমান্ডের পরিবর্তে ম্যানুয়াল ম্যাচটি খুঁজে পাওয়া সহজ :-)।
আইজাক

5
@ ইসহাক আমি মনে করি মূল বিষয়টি মানুষকে মাছ ধরতে শেখানো teach এটি বলেছিল, আমি সম্পর্কে জানতাম না less +"$cmd", তাই এর জন্য ধন্যবাদ।
জোল

3
প্রকৃতপক্ষে, আমি ওপির দৃষ্টিভঙ্গি দিয়ে উত্তর দিয়েছি; বাইরেরটি []অভ্যন্তর থেকে স্বতন্ত্র যে এটি না বাছাই করার জন্য তাদের ক্ষমা করা যেতে পারে []। আমি (!) প্রশ্নের উত্তরটি কী ছিল তা সম্পর্কে খুব বেশি কিছু না জেনে উত্তর থেকে একটি উপায় সন্ধান করার চেষ্টা করেছি , যদিও এটি ভাগ্যবান অনুমান করেছিল :)
জেফ শ্যাচলার

17

এটি কেবল বাশের জন্য নয়, এটি পসিক্স স্বরলিপির অংশ।

পসিক্স কী?

পসিক্স বা "ইউনিক্সের জন্য পোর্টেবল অপারেটিং সিস্টেম ইন্টারফেস" হ'ল মানগুলির সংকলন যা একটি (ইউএনআইএক্স) অপারেটিং সিস্টেমটিকে সমর্থন করা উচিত এমন কিছু কার্যকারিতা সংজ্ঞায়িত করে। এই মানগুলির মধ্যে একটি নিয়মিত প্রকাশের দুটি স্বাদকে সংজ্ঞায়িত করে।

POSIX বন্ধনী এক্সপ্রেশন

পসিক্স ব্র্যাকেট এক্সপ্রেশন একটি বিশেষ ধরণের অক্ষর শ্রেণি। POSIX বন্ধনী এক্সপ্রেশনগুলি নিয়মিত অক্ষর শ্রেণীর মতো অক্ষরের সেটগুলির বাইরে একটি বর্ণের সাথে মেলে।

স্ট্যান্ডার্ড পসিক্স

[[:alnum:]]   Alphanumeric characters
[[:alpha:]]   Alphabetic characters
[[:blank:]]   Space and tab
[[:cntrl:]]   Control characters
[[:digit:]]   Digits
[[:graph:]]   Visible characters (anything except spaces and control characters)
[[:lower:]]   Lowercase letters
[[:print:]]   Visible characters and spaces (anything except control characters)
[[:punct:]]   Punctuation (and symbols).
[[:space:]]   All whitespace characters, including line breaks
[[:upper:]]   Uppercase letters
[[:xdigit:]]  Hexadecimal digits

কোনও মান নেই

[[:ascii:]]   ASCII characters
[[:word:]]    Word characters (letters, numbers and underscores)

লিগ্যাসি সিনট্যাক্স (কেউ কি এর রেফারেন্স পেতে পারেন?)

[[:<:]]       Start of Word 
[[:>:]]       End of Word

আপনি এখানে আরও তথ্য পেতে পারেন: উইকি


1
[[:ascii:]], এবং [[:word:]]পসিএক্স ক্লাস নয় (এগুলি bashস্পেসিফিক মনে হয় ), এবং আমিও খুঁজে পাচ্ছি [[:<:]]না [[:>:]]। আরও ভাল রেফারেন্স হতে পারে পাবস.ওপেনগ্রুপ.আর
অনলাইনপবস

1
হ্যাঁ, [[:ascii:]]এবং [[:word:]]কোনও স্ট্যান্ডার্ড পসিক্স ক্লাস নয়। জন্য [[:<:]]এবং [[:>:]]আমি কোনো রেফারেন্স খুঁজে পাচ্ছি না, কিন্তু সেই একই হয় \ben.wikedia.org/wiki/Regular_expression#Character_class
নিমা

পোস্টগ্রিস ব্যবহারের সংজ্ঞা দেয় [[:<:]]এবং দাবি করে যে: এটি একটি এক্সটেনশান, যা পসিক্স 1003.2 এর সাথে সামঞ্জস্যপূর্ণ তবে নির্দিষ্ট নয়
আইজাক

[[:<:]]ফ্রিবিএসডি- তেও
ইলক্কাচু

1
আর [[:ascii:]][[:word:]]প্যাটার্ন ম্যাচিং মধ্যে ব্যাশ অবশ্যই কাজের, কিন্তু না রেগুলার এক্সপ্রেশনের মধ্যে (আমার সিস্টেমে অন্তত, আমি ব্যাশ সিস্টেমের Regex গ্রন্থাগার ব্যবহার মনে)। বাঃ।
ইলকচাচু

9

নিয়মিত এক্সপ্রেশন এবং ফাইলের নাম গ্লোবস / শেল প্যাটার্নগুলিতে, বন্ধনীটি [...]বন্ধনীগুলির মধ্যে তালিকাবদ্ধ থাকা যে কোনও একটি চরিত্রের সাথে মেলে। এই বন্ধনীগুলির মধ্যে, বেশ কয়েকটি নামকরা স্ট্যান্ডার্ড চরিত্রের ক্লাস ব্যবহার করা যেতে পারে। এর মধ্যে একটি হ'ল [:space:]যা \sশ্বেতস্পেসের অক্ষরের সাথে মেলে (যেমন পার্ল রেগেক্সেসের মতো)। উদাহরণস্বরূপ বাশের ম্যানুয়ালটিতে প্যাটার্ন ম্যাচিং দেখুন

সুতরাং, [[:space:]]একটি নিয়মিত প্রকাশ বা প্যাটার্ন ম্যাচের একটি অংশ, এটি কেবল শ্বেত স্পেসের সাথে মেলে।

যেমন একটি প্যাটার্ন মিল (মানক শেল, বাশ-নির্দিষ্ট নয়):

case $var in 
    *[[:space:]]*) echo "'$var' contains whitespace";;
esac

বা একটি রেজেক্স (বাশ):

if [[ $var =~ [[:space:]] ]]; then
    echo "'$var' contains whitespace"
fi

নোট করুন যদিও বন্ধনী এক্সপ্রেশনগুলি [...]নিয়মিত এক্সপ্রেশন এবং শেল প্যাটার্নগুলিতে একই কাজ করে তবে সেগুলি সাধারণত খুব বেশি একই হয় না । ( caseএবং [[ string == pattern ]]প্যাটার্ন ম্যাচগুলি [[ string =~ regex ]]ব্যবহার করুন, রেজিক্সগুলি ব্যবহার করুন)

নিয়মিত প্রকাশগুলিও শেল-নির্দিষ্ট নয়, এগুলি উদাহরণস্বরূপ awkএবং sedখুব বেশি ব্যবহৃত হয় এবং লিনাক্স ম্যান পৃষ্ঠাতে যেমন বর্ণনা করা হয়regex(7)

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