আমি ভেবেছিলাম এটি সহজ হবে - তবে এটি আমার প্রত্যাশার চেয়ে জটিল প্রমাণিত হচ্ছে।
আমি একটি ডিরেক্টরিতে একটি নির্দিষ্ট ধরণের সমস্ত ফাইলের মাধ্যমে পুনরাবৃত্তি করতে চাই, তাই আমি এটি লিখি:
#!/bin/bash
for fname in *.zip ; do
echo current file is ${fname}
done
ডিরেক্টরিটিতে কমপক্ষে একটি ম্যাচিং ফাইল থাকা পর্যন্ত এটি কাজ করে। তবে যদি কোনও মেলানো ফাইল না থাকে তবে আমি এটি পাই:
current file is *.zip
আমি তখন চেষ্টা করেছি:
#!/bin/bash
FILES=`ls *.zip`
for fname in "${FILES}" ; do
echo current file is ${fname}
done
যখন কোনও ফাইল নেই তখন লুপের বডি চালিত হয় না, আমি ls থেকে একটি ত্রুটি পেয়েছি:
ls: *.zip: No such file or directory
আমি কীভাবে কোনও লুপ লিখব যা পরিষ্কারভাবে কোনও মিল নেই ফাইলগুলি পরিচালনা করে?
FILES=
ls * .zip করি ; for fname in "${FILES}"...
তবে এটি প্রত্যাশার মতো কাজ করেfor fname in *.zip ; do....
for file in *.zip
, না `ls ...`
। @ কিউংলমের পরামর্শটি হ'ল *.zip
প্যাটার্নটি কোনও ফাইলের সাথে মেলে না nothing ls
যুক্তি ছাড়াই বর্তমান ডিরেক্টরি তালিকা করে।
ls
সাধারণত আউটপুট পার্স করা যায়: পার্স করা হয় না কেন ? ls
; বাশগুইডের পার্সিংএলস নিবন্ধের সেই পৃষ্ঠার শীর্ষের লিঙ্কটিও দেখুন ।
shopt -s nullglob
লুপ চালানোর আগে যুক্ত করুন ।