test=$line i=0
while case "$test" in (*select*)
test=${test#*select};;(*) ! :;;
esac; do i=$(($i+1)); done
आप grep
इस तरह के एक साधारण बात के लिए फोन करने की जरूरत नहीं है।
या एक समारोह के रूप में:
occur() while case "$1" in (*"$2"*) set -- \
"${1#*"$2"}" "$2" "${3:-0}" "$((${4:-0}+1))";;
(*) return "$((${4:-0}<${3:-1}))";;esac
do : "${_occur:+$((_occur=$4))}";done
इसमें 2 या 3 args लगते हैं। इससे अधिक प्रदान करना इसके परिणामों को कम करेगा। आप इसका उपयोग कर सकते हैं जैसे:
_occur=0; occur ... . 2 && echo "count: $_occur"
... जो की घटना गिनती प्रिंट .
में ...
अगर यह होता है तो कम से कम 2 बार। ऐशे ही:
count: 3
यदि $_occur
या तो खाली है या unset
जब इसे लागू किया जाता है तो यह कम समय में कोई भी शेल चर और return
1 को प्रभावित नहीं करेगा । या, यदि केवल दो आर्ग के साथ कहा जाता है, तो यह केवल 1 होगा यदि अंदर नहीं है । और यह रिटर्न 0।"$2"
"$1"
"$3"
return
"$2"
"$1"
और इसलिए, अपने सरलतम रूप में, आप यह कर सकते हैं:
occur '' . && echo yay || echo shite
... जो प्रिंट करता है ...
shite
...परंतु...
occur . . && echo yay || echo shite
... छपेगा ...
yay
आप इसे थोड़ा अलग तरीके से लिख सकते हैं और उद्धरण और कथन $2
दोनों में उद्धरणों को छोड़ सकते हैं । यदि आप ऐसा करते हैं तो आप मैच टेस्ट के लिए मैचों के लिए शेल ग्लब्स का उपयोग कर सकते हैं ।(*"$2"*)
"${1#*"$2"}"
sh[io]te
...<<<"$line"
। कमांडgrep
इसके बजाय एक फ़ाइल की उम्मीद कर रही है