কন্ডিশন রেজেক্স ত্রুটি


14
string=123456

if [ $string == 123456 ]; then
echo 123
fi

এটি দুর্দান্ত কাজ করে তবে আমি যদি == থেকে = change পরিবর্তন করি তবে আমি এই ত্রুটিটি পেয়েছি:

./test: line 3: [: =~: binary operator expected

=~এই ক্ষেত্রে ব্যবহার ভুল। অনুকরণের ডান দিকে =~নিয়মিত regexএক্সপ্রেসনের সাথে প্যাটার (অ্যাসাইনমেন্টের বাম দিক) তুলনা করে । এর সর্বাধিক আকারে একটি নিয়মিত '[0-9][0-9]'
প্রকাশটি

9
@ ভাল0x00 এফ তবে 123456এটি বৈধ
আরআর

@roaima একমত, তবে Regex তার ইঞ্জিন, ব্যাক উল্লেখ, চরিত্র সেট, মেটা অক্ষর একটি স্ট্রিংয়ের শুরু বাচক একটি স্ট্রিং ইত্যাদি বিভক্তি জন্য পরিচিত হয়
ভ্যালেন্টিন Bajrami

উত্তর:


29

ব্যাশ 'র Regex ম্যাচিং শুধুমাত্র ডবল বর্গাকার বন্ধনী মধ্যে কাজ করে[[ ... ]]:

string=123456
if [[ "$string" =~ 123456 ]]; then echo 123; fi
123

@ কুসালানন্দ: সম্পাদনা সম্পর্কে, ডাবল বন্ধনী অভিব্যক্তির বাম দিকে কোটগুলি আবশ্যক নয় [[ ... ]], কারণ সেখানে কোনও শব্দ বিভাজন বা পথের নাম প্রসারিত হয় না। এগুলি কেবলমাত্র একক বন্ধনী [ ... ](উভয় পক্ষ) এবং ডাবল বন্ধনী এক্সপ্রেশন এর ডান হাত ব্যবহার করার সময় প্রয়োজন হয় ।
ব্যবহারকারী000001

@ ব্যবহারকারী000001 আপনি সঠিক হওয়ার সময়, রিফ্লেক্সের দ্বারা সমস্ত ভেরিয়েবলের উদ্ধৃতি দেওয়া আরও ভাল যদি না প্রয়োজন হয় না। এটি অনেক বেশি নিরাপদ অভ্যাস।
জো

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