এটি প্রাথমিকভাবে আশ্চর্যজনক ওয়াইল্ডকার্ড আচরণ, যেহেতু *
ওয়াইল্ডকার্ড চরিত্রের বিবরণ বলে:
নাল স্ট্রিং সহ যে কোনও স্ট্রিংয়ের সাথে মেলে।
... যতক্ষণ না আপনি বুঝতে পারি যে সময়ের সামান্য বিশেষ যখন এটা প্রথম একটি ফাইলের নাম চরিত্র। প্রবর্তক পাঠ্যটি এতে 3.5.8 Filename Expansion
বলেছে:
ফাইলের নাম প্রসারণের জন্য যখন কোনও প্যাটার্ন ব্যবহৃত হয়, তখন অক্ষর '' ' কোনও ফাইল নামের শুরুতে বা তত্ক্ষণাত্ স্ল্যাশ অনুসরণ করে অবশ্যই স্পষ্টভাবে মিলিত হওয়া উচিত, যতক্ষণ না শেল বিকল্প ডটগ্লোব সেট না করা হয়।
স্টাইলড্রাইভার মন্তব্য হিসাবে বাশ শেলের শীর্ষস্থানীয় ড্যাশ সহ নামগুলি পরিচালনা./
করার জন্য ওয়াইল্ডকার্ডগুলির উপসর্গের "ব্যবহারের ধরণ" দরকারী useful ওয়াইল্ডকার্ড / ফাইলনামের সম্প্রসারণে এর কোনও প্রভাব নেই, তবে আপনি যখন ফাইলগুলির নাম উল্লেখ করেন সেগুলি হ্যান্ডেল করা নিরাপদ / সহজ করে তোলে, যদি সেগুলি যদি এমন চরিত্রের সাথে শুরু হয় যা সেই প্রোগ্রামগুলি অপশন হিসাবে ভুল ব্যাখ্যা করতে পারে। উদাহরণ স্বরূপ:
# I want a file named `-n`
$ touch -n
touch: invalid option -- 'n'
Try 'touch --help' for more information.
$ touch -- -n
### ok
$ touch ./-n
### ok
... এবং এখন যে আমার কাছে একটি ফাইল রয়েছে -n
, যদি আমি কোনও ওয়াইল্ডকার্ড দিয়ে লুপ করতে যাই:
for file in *n
do
echo "$file"
done
... আমি কোন আউটপুট পাই না!
তবে আমি যদি ওয়াইল্ডকার্ডের সাথে উপসর্গ করি ./
,
for file in ./*n
do
echo "$file"
done
./-n
... আমি ফাইলের নাম দেখছি।
এটি প্রদর্শনের উদ্দেশ্যে একটি সাধারণ উদাহরণ; আরও দেখুন প্রিন্টফ প্রতিধ্বনির চেয়ে কেন ভাল? এই কারণে এবং অন্যদের জন্য। অন্যান্য ইউটিলিটিগুলি অন্যান্য বিকল্পগুলির দ্বারা বিভক্ত হয়ে যাবে, সুতরাং ফাইলের নামগুলি যথাসম্ভব নিরাপদে ইউটিলিটির কাছে উপস্থাপন করা ভাল। যদি আপনি ফাইলের নামগুলি "পালানোর" জন্য ওয়াইল্ডকার্ডের উপসর্গ না করেন, আপনাকে আপনার উপযোগগুলি অন্য উপায়ে "সুরক্ষা" দিতে হবে; এক সাধারণ এক সঙ্গে অপশনের শেষ সংকেত হয় --
উদাহরণস্বরূপ:
for file in *n
do
mv -- "$file" backup/"$file"
done
... যা নিরাপদে -n
ফাইলের নামটি mv
(নীচে দেখানো হয়েছে set -x
) এ পাস করবে :
mv -- -n backup/-n
./*
হ'ল এটি নিশ্চিত করে যে নামগুলির সাথে শুরু হওয়া নামগুলি-
বিকল্প হিসাবে বিবেচিত হবে না।