আপনি যদি জানেন তবে বর্তমান ডিরেক্টরিটিতে কমপক্ষে একটি অ গোপন ফাইল রয়েছে:
set -- *; echo "$#"
এটি স্পষ্টতই যে কোনও গ্লোবকে সাধারণীকরণযোগ্য।
কোনও স্ক্রিপ্টে, এর অবস্থানগত পরামিতিগুলিকে ওভাররাইট করার ক্ষেত্রে কখনও কখনও দুর্ভাগ্যজনক পার্শ্ব প্রতিক্রিয়া থাকে। আপনি একটি সাব-শেল ব্যবহার করে বা কোনও ফাংশন (বোর্ন / পোসিক্স সংস্করণ) এর মাধ্যমে এটিকে ঘিরে কাজ করতে পারেন:
count_words () {
eval 'shift; '"$1"'=$#'
}
count_words number_of_files *
echo "There are $number_of_files non-dot files in the current directory"
এর বিকল্প সমাধান হ'ল $(ls -d -- * | wc -l)
। গ্লোবটি থাকলে *
, কমান্ডটি ছোট করা যেতে পারে $(ls | wc -l)
। আউটপুট ls
সর্বদা পার্স করা আমাকে অস্বস্তি করে তোলে, তবে আপনার ফাইলের নামগুলিতে যতক্ষণ না নিউলাইন থাকে না বা আপনার ls
এড়িয়ে যায় ততক্ষণ এটি কাজ করা উচিত । এবং $(ls -d -- * 2>/dev/null | wc -l)
কোনও মেলে না এমন গ্লোবের কেসটি কৌতূহলীভাবে পরিচালনা করার সুবিধা রয়েছে (যেমন, এটি সেই ক্ষেত্রে 0 প্রত্যাবর্তন করে, অন্যদিকে set *
গ্লোবটি খালি থাকলে পদ্ধতিটি স্বতঃস্ফূর্তভাবে পরীক্ষা করা প্রয়োজন)।
যদি ফাইলের নামগুলিতে নিউলাইন অক্ষর থাকতে পারে তবে একটি বিকল্প ব্যবহার করা হবে $(ls -d ./* | grep -c /)
।
প্রচুর ম্যাচিং ফাইল থাকলে একটি গ্লোব সম্প্রসারণের উপর নির্ভর করে এমন কোনও সমাধান যুক্তি তালিকারls
সাথে লম্বা ত্রুটি হতে ব্যর্থ হতে পারে ।