जवाबों:
आप का उपयोग कर सकते ${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
निम्नलिखित दो दृष्टिकोण किसी भी POSIX- अनुकूल वातावरण पर काम करेंगे, न कि केवल बैश में:
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