উত্তর:
আপনি এমন ফর্মটি ব্যবহার করতে পারেন ${VAR/subs}
যেখানে VAR
বড় স্ট্রিং রয়েছে এবং
subs
এটি হ'ল সাবস্ট্রিংটি অনুসন্ধানের চেষ্টা করছেন:
my_string=abc
substring=ab
if [ "${my_string/$substring}" = "$my_string" ] ; then
echo "${substring} is not in ${my_string}"
else
echo "${substring} was found in ${my_string}"
fi
এটি ${VAR/subs}
সমান কারণ এই $VAR
স্ট্রিংটির প্রথম উপস্থিতিটি subs
মুছে ফেলা সমেত , বিশেষত $VAR
শব্দটি subs
না থাকলে এটি সংশোধন করা হবে না।
ab was found in abc
, তবে আমি যদি ব্যবহার substring=z
করি তবে পাইz was found in abc
ab is not in abc
। কিন্তু z was found in abc
। এটি মজাদার: ডি
[[ "bcd" =~ "ab" ]]
[[ "abc" =~ "ab" ]]
বন্ধনী পরীক্ষার জন্য, এবং এটি ডাবল বন্ধনী হিসাবে এটি কিছু অতিরিক্ত পরীক্ষার পছন্দ করতে পারে =~
।
সুতরাং আপনি এই ফর্ম কিছু ব্যবহার করতে পারে
var1="ab"
var2="bcd"
if [[ "$var2" =~ "$var1" ]]; then
echo "pass"
else
echo "fail"
fi
সম্পাদনা করুন: "= ~" সংশোধন হয়েছে, উল্টানো হয়েছিল।
fail
এই প্যারামিটারগুলি সহ পেয়েছি :var2="abcd"
[[ $string =~ $substring ]]
। আমি উত্তর আপডেট।
বাশ ফাইলের নাম নিদর্শন (ওরফে "গ্লোব" নিদর্শন) ব্যবহার করে
substr=ab
[[ abc == *"$substr"* ]] && echo yes || echo no # yes
[[ bcd == *"$substr"* ]] && echo yes || echo no # no
নিম্নলিখিত দুটি পন্থা কেবল ব্যাশে নয়, কোনও পসিক্স-সামঞ্জস্যপূর্ণ পরিবেশে কাজ করবে:
substr=ab
for s in abc bcd; do
if case ${s} in *"${substr}"*) true;; *) false;; esac; then
printf %s\\n "'${s}' contains '${substr}'"
else
printf %s\\n "'${s}' does not contain '${substr}'"
fi
done
substr=ab
for s in abc bcd; do
if printf %s\\n "${s}" | grep -qF "${substr}"; then
printf %s\\n "'${s}' contains '${substr}'"
else
printf %s\\n "'${s}' does not contain '${substr}'"
fi
done
উপরের দুটি আউটপুট:
'abc' contains 'ab'
'bcd' does not contain 'ab'
প্রাক্তনটির পৃথক grep
প্রক্রিয়া তৈরি না করার সুবিধা রয়েছে ।
নোট করুন যে আমি এর printf %s\\n "${foo}"
পরিবর্তে ব্যবহার করি echo "${foo}"
কারণ এটিতে ব্যাকস্ল্যাশগুলি থাকলে echo
ম্যাঙ্গেল হতে পারে ${foo}
।
xrandr
ভেরিয়েবলে সঞ্চিত মনিটরের নামের তালিকায় মনিটর নামের সাবস্ট্রিং সন্ধানের জন্য প্রথম সংস্করণ পুরোপুরি কাজ করে । +1 এবং 1K প্রতিনিধির ক্লাবে :) স্বাগত
এটি সর্বাধিক বহনযোগ্য সমাধান, এমনকি পুরানো বোর্ন শেল এবং কর্ন শেলের উপরও কাজ করবে
#!/bin/bash
case "abcd" in
*$1*) echo "It's a substring" ;;
*) echo "Not a substring" ;;
esac
নমুনা রান:
$ ./case_substr.sh "ab"
It's a substring
$ ./case_substr.sh "whatever"
Not a substring
নোট করুন যে আপনি ব্যবহার echo
করতে পারেন exit 1
এবং exit 0
সাফল্য বা ব্যর্থতার পরিচয় দিতে বিশেষভাবে আপনাকে ব্যবহার করতে হবে না ।
আমরা যা করতে পারি তা হ'ল একটি ফাংশন তৈরি করা (যা প্রয়োজনে বড় স্ক্রিপ্টগুলিতে ব্যবহার করা যেতে পারে) নির্দিষ্ট প্রত্যাবর্তনের মানগুলি (ম্যাচে 0, কোনও ম্যাচে 1 নয়):
$ ./substring_function.sh
ab is substring
$ cat substring_function.sh
#!/bin/sh
is_substring(){
case "$2" in
*$1*) return 0;;
*) return 1;;
esac
}
main(){
if is_substring "ab" "abcdefg"
then
echo "ab is substring"
fi
}
main $@
$ grep -q 'ab' <<< "abcd" && echo "it's a substring" || echo "not a substring"
it's a substring
এই নির্দিষ্ট পদ্ধতিটি যদি-অন্য বিবৃতিতে থাকে তবে তা কার্যকর bash
। বেশিরভাগই বহনযোগ্য
$ awk '$0~/ab/{print "it is a substring"}' <<< "abcd"
it is a substring
$ python -c 'import sys;sys.stdout.write("it is a substring") if "ab" in sys.stdin.read() else exit(1)' <<< "abcd"
it is a substring
$ ruby -e ' puts "is substring" if ARGV[1].include? ARGV[0]' "ab" "abcdef"
is substring
মন [[
এবং "
:
[[ $a == z* ]] # True if $a starts with an "z" (pattern matching).
[[ $a == "z*" ]] # True if $a is equal to z* (literal matching).
[ $a == z* ] # File globbing and word splitting take place.
[ "$a" == "z*" ] # True if $a is equal to z* (literal matching).
যেমনটি @glenn_jackman বলেছেন, তবে মনে রাখবেন যে আপনি যদি পুরো দ্বিতীয় মেয়াদটি ডাবল কোটে মুড়ে রাখেন তবে এটি পরীক্ষাকে আক্ষরিক মিলের দিকে বদলে দেবে ।
এডউইনের উত্তরের অনুরূপ, তবে পিক্সিক & কেএসএস এর উন্নত বহনযোগ্যতা এবং রিচার্ডের তুলনায় কম স্পর্শ:
substring=ab
string=abc
if [ "$string" != "${string%$substring*}" ]; then
echo "$substring IS in $string"
else
echo "$substring is NOT in $string"
fi
string=bcd
if [ "$string" != "${string%$substring*}" ]; then
echo "$string contains $substring"
else
echo "$string does NOT contain $substring"
fi
আউটপুট:
abc contains ab
bcd does NOT contain ab
echo
বিবৃতিগুলির ক্রম পরিবর্তন করা উচিত । কারণ আমি পেয়েছিab is not in abc