stringContain
রূপগুলি (সামঞ্জস্যপূর্ণ বা ক্ষেত্রে স্বতন্ত্র)
এই স্ট্যাক ওভারফ্লো উত্তরগুলি বেশিরভাগ ক্ষেত্রে বাশ সম্পর্কে বলে , আমি এই পোস্টের একেবারে নীচে একটি স্বাধীন স্বতন্ত্র বাশনের ঘটনা পোস্ট করেছি ...
যাইহোক, আমার আছে
সামঞ্জস্যপূর্ণ উত্তর
বাশ-নির্দিষ্ট বৈশিষ্ট্যগুলি ব্যবহার করে ইতিমধ্যে ইতিমধ্যে প্রচুর উত্তর রয়েছে, তাই ব্যাসিবক্সের মতো দরিদ্র-বৈশিষ্ট্যযুক্ত শেলগুলির নীচে কাজ করার একটি উপায় রয়েছে :
[ -z "${string##*$reqsubstr*}" ]
বাস্তবে, এটি দিতে পারে:
string='echo "My string"'
for reqsubstr in 'o "M' 'alt' 'str';do
if [ -z "${string##*$reqsubstr*}" ] ;then
echo "String '$string' contain substring: '$reqsubstr'."
else
echo "String '$string' don't contain substring: '$reqsubstr'."
fi
done
এটি বাশ, ড্যাশ , কর্নশেল ( ksh
) এবং অ্যাশ ( ব্যজিবক্স ) এর অধীনে পরীক্ষা করা হয়েছিল এবং ফলাফল সর্বদা:
String 'echo "My string"' contain substring: 'o "M'.
String 'echo "My string"' don't contain substring: 'alt'.
String 'echo "My string"' contain substring: 'str'.
একটি ফাংশনে
@ ইয়েরো অ্যালটনেন জিজ্ঞাসাবাদ অনুসারে এখানে একই শেলের অধীনে পরীক্ষিত একই ডেমোটির একটি সংস্করণ রয়েছে:
myfunc() {
reqsubstr="$1"
shift
string="$@"
if [ -z "${string##*$reqsubstr*}" ] ;then
echo "String '$string' contain substring: '$reqsubstr'.";
else
echo "String '$string' don't contain substring: '$reqsubstr'."
fi
}
তারপর:
$ myfunc 'o "M' 'echo "My String"'
String 'echo "My String"' contain substring 'o "M'.
$ myfunc 'alt' 'echo "My String"'
String 'echo "My String"' don't contain substring 'alt'.
বিজ্ঞপ্তি: আপনাকে পালাতে হবে বা ডাবল এনকোলেস উদ্ধৃতি এবং / অথবা ডাবল উদ্ধৃতি:
$ myfunc 'o "M' echo "My String"
String 'echo My String' don't contain substring: 'o "M'.
$ myfunc 'o "M' echo \"My String\"
String 'echo "My String"' contain substring: 'o "M'.
সাধারণ ফাংশন
এটি ব্যাসিবক্স, ড্যাশ এবং অবশ্যই বাশের অধীনে পরীক্ষা করা হয়েছিল:
stringContain() { [ -z "${2##*$1*}" ]; }
তারপর এখন:
$ if stringContain 'o "M3' 'echo "My String"';then echo yes;else echo no;fi
no
$ if stringContain 'o "M' 'echo "My String"';then echo yes;else echo no;fi
yes
... অথবা যদি সাবজেক্ট স্ট্রিংটি ফাঁকা থাকতে পারে, যেমন @ এসজলভার দ্বারা নির্দেশিত, ফাংশনটি হয়ে উঠবে:
stringContain() { [ -z "${2##*$1*}" ] && [ -z "$1" -o -n "$2" ]; }
বা অ্যাড্রিয়ান গন্টারের মন্তব্য অনুসারে , -o
সুইচগুলি এড়িয়ে চলেন :
stringContain() { [ -z "${2##*$1*}" ] && { [ -z "$1" ] || [ -n "$2" ];};}
চূড়ান্ত (সহজ) ফাংশন:
এবং পরীক্ষাগুলি তাদের সম্ভাব্যতর দ্রুত করার জন্য বিপরীত করা:
stringContain() { [ -z "$1" ] || { [ -z "${2##*$1*}" ] && [ -n "$2" ];};}
খালি স্ট্রিং সহ:
$ if stringContain '' ''; then echo yes; else echo no; fi
yes
$ if stringContain 'o "M' ''; then echo yes; else echo no; fi
no
কেস ইন্ডিপেন্ডেন্ট (কেবল বাশ!)
কেস যত্ন না নিয়ে স্ট্রিং পরীক্ষা করার জন্য, প্রতিটি স্ট্রিংকে কেবল নিম্ন কেসিতে রূপান্তর করুন:
stringContain() {
local _lc=${2,,}
[ -z "$1" ] || { [ -z "${_lc##*${1,,}*}" ] && [ -n "$2" ] ;} ;}
পরীক্ষা করে দেখুন:
stringContain 'o "M3' 'echo "my string"' && echo yes || echo no
no
stringContain 'o "My' 'echo "my string"' && echo yes || echo no
yes
if stringContain '' ''; then echo yes; else echo no; fi
yes
if stringContain 'o "M' ''; then echo yes; else echo no; fi
no