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'.
एक समारोह में
जैसा कि @EeroAaltonen द्वारा पूछा गया है, यहां एक ही डेमो का एक संस्करण है, जो एक ही गोले के तहत परीक्षण किया गया है:
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
... या यदि सबमिट किया गया स्ट्रिंग खाली हो सकता है, जैसा कि @Sjlver द्वारा बताया गया है, तो फ़ंक्शन बन जाएगा:
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