ব্যাশে ক্লজ থাকলে ভিতরে রেজেক্স ব্যবহার করা


10

ব্লক হলে এটি দেখুন:

#!/bin/bash

str="m.m"
if [[ "${str}" =~ "m\.m" ]]; then
    echo "matched"
else
    echo "not matched"
    exit 1
fi

exit 0

এটি "ম্যাচ করা" মুদ্রণ করা উচিত, তবে তা হয় না। কোথায় আমি ভুল যাচ্ছি?

উত্তর:


21

রেজেেক্স ম্যাচে আপনার উদ্ধৃতি অপসারণ করতে হবে।

if [[ ${str} =~ m\.m ]]; then

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

[...] অতিরিক্ত বাইনারি অপারেটর, = ~, == এবং! = এর একই প্রাধান্য সহ উপলব্ধ। এটি ব্যবহার করা হলে, অপারেটরের ডানদিকে স্ট্রিংকে একটি বর্ধিত নিয়মিত এক্সপ্রেস সায়ন হিসাবে বিবেচনা করা হয় এবং তদনুসারে ম্যাচটি করা হয় (রেগেক্স (3) হিসাবে)। যদি স্ট্রিংটি প্যাটার্নের সাথে মেলে এবং অন্যথায় 1টি ফেরতের মান হয়। যদি নিয়মিত ভাবটি সিনট্যাক্টিক্যালি ভুল হয় তবে শর্তসাপেক্ষ এক্সপ্রেশনটির রিটার্ন মান 2 হয় If শেল বিকল্প নোকাসেম্যাচ সক্ষম করা থাকলে, বর্ণমালা অক্ষরের ক্ষেত্রে বিবেচনা না করে ম্যাচটি সম্পাদিত হয়। প্যাটার্নটির যে কোনও অংশই স্ট্রিং হিসাবে মিলতে বাধ্য করার জন্য উদ্ধৃত করা যেতে পারে।

উদ্ধৃতিগুলির সাথে, আপনি ভাল-পুরাতন স্ট্রিং মেলা ব্যবহার করছেন।

প্যাটার্নে আপনার যদি ফাঁকির প্রয়োজন হয় তবে কেবল তাদের ছেড়ে দিন:

str="m   m"
if [[ ${str} =~ m\ +m ]]; then

তবে কোনও ডাবল উদ্ধৃতি না থাকলে আমরা রেগেক্স প্যাটার্নে স্থানের অক্ষর ব্যবহার করতে পারি না। এর কোন সমাধান আছে কি?
মাজিদ আজিমি

1
স্থান যেমন পালাতে হবে \
5 МАЛИКОВ

যদি আমি একটি স্ট্রিং সন্ধান করতে চাই যা ডায়নামিক সংখ্যার সাথে শেষ হয় তবে ${str} =~ "needle"[0-9]{1}আমি ব্যবহার করব বা ব্যবহার করব ${str} =~ needle[0-9]{1}?
মিলাগুট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.