আমি কীভাবে ব্যাশ স্ক্রিপ্টগুলিতে নিয়মিত এক্সপ্রেশন ব্যবহার করব?


83

আমি নিয়মিত এক্সপ্রেশন ব্যবহার করে কোনও চলকটির বৈধ বছর রয়েছে কিনা তা আমি যাচাই করতে চাই। ব্যাশ ম্যানুয়ালটি পড়া আমি বুঝতে পারি যে আমি অপারেটর = = use ব্যবহার করতে পারি ~

নীচের উদাহরণটির দিকে তাকালে, আমি "ঠিক নেই" দেখতে আশা করব তবে আমি "ঠিক আছে" দেখব। আমি কি ভুল করছি?

i="test"
if [ $i=~"200[78]" ]
then
  echo "OK"
else
  echo "not OK"
fi


নোট করুন আশেপাশের জায়গাগুলির অভাবে এটি ব্যর্থ হয়েছিল =~
ফেডরকিই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

উত্তর:


116

এটি 3.1 থেকে 3.2 এর মধ্যে পরিবর্তন করা হয়েছিল:

এটি bash-3.1 প্রকাশের পর থেকে bash-3.2 এ যুক্ত হওয়া নতুন বৈশিষ্ট্যগুলির সংক্ষিপ্ত বিবরণ।

স্ট্রিং আর্গুমেন্টকে [[কমান্ডের = argument অপারেটরের সাথে উদ্ধৃতি করা) এখন অন্যান্য প্যাটার্ন-ম্যাচিং অপারেটরগুলির মতো স্ট্রিং ম্যাচিংয়ে বাধ্য করে।

সুতরাং এটি উদ্ধৃতি ছাড়াই এভাবে ব্যবহার করুন:

i="test"
if [[ $i =~ 200[78] ]] ; then
    echo "OK"
else
    echo "not OK"
fi

4
আমি যখন পরিস্থিতিটি পরিচালনা করব না যখন রেজেক্সে শূন্যস্থান রয়েছে যদি আমি উদ্ধৃতি না দিতে পারি? যদি a +b
রেজেক্সটি

4
@ অ্যালাদারথ: a\ \+bস্পেস এবং প্লাস চরিত্রটি পালাতে ব্যবহার করুন ।
জ্বলজ্বল করুন

8

অপারেটরের চারপাশে আপনার ফাঁকা স্থানগুলি প্রয়োজন = ~ ~

i = "পরীক্ষা"
যদি [[$ i = ~ "200 [78]"]];
তারপর
  "ঠিক আছে" প্রতিধ্বনি
অন্য
  প্রতিধ্বনি "ঠিক আছে না"
ফাই

4
প্যাক্সিডাব্লোর উত্তরটি সঠিক, এখানে স্পেস যোগ করা কোনও লাভ করে না (আপনি এখন ২০০৮-এর জন্য "ঠিক নেই "ও পান, একমাত্র স্ট্রিং যা মিলবে আক্ষরিক অর্থে" 200 [] 78] ")।
মার্সেল স্টিমবার্গ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.