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 টি অর্গ নেয়। এর চেয়ে বেশি সরবরাহ করা তার ফলাফলগুলিকে আঁকিয়ে ফেলবে। আপনি এটি ব্যবহার করতে পারেন:
_occur=0; occur ... . 2 && echo "count: $_occur"
... যার সংঘটন গণনা ছাপে .মধ্যে ...যদি এটি ঘটে কমপক্ষে 2 বার। এটার মত:
count: 3
যদি $_occurপারেন খালি থাকে বা unsetযখন এটা প্রার্থনা করা হয়েছে তারপর এটা কোন শেল ভেরিয়েবল এ সব প্রভাবিত হবে return1 যদি "$2"ঘটে "$1"কম "$3"বার। অথবা, যদি কেবল দুটি টি আর্গ দিয়ে ডাকা হয় তবে এটি return1 "$2"না থাকলে কেবল 1 হবে "$1"। অন্যথায় এটি 0 ফেরত দেয়।
এবং তাই, এর সহজতম ফর্মটিতে, আপনি এটি করতে পারেন:
occur '' . && echo yay || echo shite
... যা ছাপায় ...
shite
... কিন্তু ...
occur . . && echo yay || echo shite
... মুদ্রণ করবে ...
yay
আপনি এটিকে কিছুটা আলাদাভাবে লিখতেও $2পারেন (*"$2"*)এবং "${1#*"$2"}"স্টেটমেন্ট এবং স্টেটমেন্ট উভয় ক্ষেত্রেই উদ্ধৃতিগুলি বাদ দিতে পারেন । যদি আপনি এটি করেন তবে আপনি sh[io]teম্যাচ টেস্টের মতো ম্যাচের জন্য শেল গ্লোবগুলি ব্যবহার করতে পারেন ।
...<<<"$line"। কমান্ডটিgrepতার পরিবর্তে কোনও ফাইলের প্রত্যাশা করছে